0

我正在使用 tkinter 画布并尝试在我的游戏右侧制作一个聊天框。然而,当我这样做时,我发现...

import turtle
import tkinter as tk
master = tk.Tk()
w = tk.Canvas(master,width=1155,height=600,cursor='cross_reverse', bg='#101010')
shift = 1.000

sc = turtle.TurtleScreen(w)
tu = turtle.RawTurtle(sc)
e = tk.Entry(master, bg = '#000', fg = '#03f', font = 'Courier', justify='right', insertbackground = '#101010',width='115')
lb = tk.Listbox(master,height=3)
#e.grid(row=3,column=3)
sc.bgcolor("#101010")

txt = tk.Text(master,state="disabled")

txt.pack()
lb.pack()
w.pack()
sc.tracer(100)
drawcontinents()    #Draws stuff with turtle, works just fine
e.pack()
tk.mainloop()

... 一些事情出错了。

1.Text和Entry似乎不想共存。我似乎只能拥有一个或另一个。我的计划是使用条目作为聊天条目,并以文本形式显示消息。我的备用计划是将消息附加到标签。

2.文本、条目和标签框在它们所在的任何行中占据整个窗口,这挡住了我试图绘制的其余部分。换句话说,它将文本框放在中心,在我绘制的任何内容上都有一条从一边到另一边的大灰色条纹。有没有办法只显示盒子,然后把它放在右边?

3.每当我尝试使用网格系统时,我的整个计算机都会死机,我必须重新启动。这是因为程序占用的空间比我可用的空间多,还是这是已知的错误或安装问题?

4

1 回答 1

1

您不能同时将两者pack用于grid相同的包含小部件(即:对于同一框架、顶层或根窗口内的所有小部件)。

发生的情况是:网格布局所有小部件,可能会根据您的选项更改某些小部件的大小(即:它可能会增长一个小部件以粘在单元格的两侧)。pack 然后注意到一些小部件在它认为它负责的包含小部件中改变了大小,因此它重做它认为正确的布局。这可能会根据您的选项更改某些小部件的大小。然后 grid 注意到它认为它负责改变大小的一些小部件,因此它重做它所做的,可能会改变一些小部件的大小。打包通知和重新调整,网格通知和重新调整,打包通知,......直到时间结束。

解决方案很简单:对于所有具有共同父级的小部件,仅使用网格或仅使用包。在这种情况下,您所有的小部件都作为其父窗口共享根窗口,因此它们都需要使用网格,或者它们都需要使用包。

于 2013-08-05T14:13:55.290 回答