【发布时间】:2015-04-21 04:59:09
【问题描述】:
所以,我有一个使用以下代码创建的基本布局(为简洁起见,写在这里):
class ClientUI(tk.Frame):
def __init(self, master, client, queue, send_command):
self.master = master
self.master.grid()
tk.Grid.rowconfigure(self.master, 0, weight=1)
tk.Grid.columnconfigure(self.master, 0, weight=1)
self.create_widgets()
# This is just to figure out what's going on
pprint(vars(master))
self.output_panel = master.children['output']
def create_widgets(self):
output = ScrolledText(self.master, name="output", state=tk.DISABLED)
output.grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W)
我曾希望将ScrolledText 添加到网格中。当我只使用 Text 小部件时,这确实有效。
但是,我得到了 KeyError,因为 output 不在子列表中。以下是pprint 语句的输出(再次,剪切以显示相关部分):
'children': {'34864544': <client.clientui.ClientUI object at 0x000000000213FDA0>,
'46887376': <tkinter.Frame object at 0x0000000002CB71D0>,
'46890008': <tkinter.Menu object at 0x0000000002CB7C18>,
'input': <tkinter.Entry object at 0x0000000002CB76A0>}
如您所见,在未显示的代码中添加了一个名为 input 的子代。但是,似乎没有添加名为 output 的小部件。为什么output.grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W)没有按预期添加?
【问题讨论】:
-
如果
self是Frame,你不应该将小部件添加到self而不是master吗? -
我同意 tobias_k 你为什么不直接做
output = ScrolledText(self, ...? -
@tobias_k 尽管这可能是个好主意。问题仍然是向
self.master添加Text小部件确实有效。ScrolledText有什么不同吗?也许是因为它本身就在Frame中?
标签: python tkinter python-3.3