Итак, у меня есть основная схема, которая создается с помощью следующего кода (написанного здесь для краткости):Добавление Tkinter ScrolledText к сетке
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 Несмотря на то, что это, вероятно, хорошая идея. Остается вопрос: добавление виджета 'Text' в' self.master 'работал. Есть ли что-то другое в' ScrolledText'? Может быть, потому, что оно находится в 'самом кадре'? – ToothlessRebel