我有一个Toplevel类DesignWindow
,当我按照这里讨论的方式调用它时,它包含一个10x10的按钮数组:Tkinter; Toplevel in a new class它在最后一个内创建窗口。
我做错了什么?唯一的区别是我的根源'窗口(带菜单)是tk.Frame,而不是引用问题中的tk.Tk。
class MainWindow(tk.Frame):
"""Draw the main window"""
def __init__(self, parent):
tk.Frame.__init__(self, parent, background='grey')
self.parent = parent
self.menuscreen = MenuScreen(self)
self.grid()
self.menuscreen.design.grid(column=0, row=0)
class MenuScreen(tk.Frame):
"""Create the menu screen"""
def __init__(self, parent):
self.design = tk.Button(command=self.create_design_window, text="Design")
def create_design_window(self):
self.design_window = DesignWindow(self)
class DesignWindow(tk.Toplevel):
"""Frame for design mode"""
def __init__(self, main):
tk.Toplevel.__init__(self)
编辑按钮的生成:
self.btn = [[0 for x in range(10)] for x in range(10)]
for column in range(10):
for row in range(10):
self.btn[column][row] = tk.Button(main)
self.btn[column][row].grid(column=column, row=row)
答案 0 :(得分:1)
我不确定答案中是否有足够的代码可以肯定地知道,但我肯定会立即看到两个错误。
首先,MenuScreen
没有调用它的超类__init__
。您需要将其添加到MenuScreen.__init__
:
tk.Frame.__init__(self, parent)
其次,您没有向MenuScreen
中的小部件提供父级,因此它们会添加到根窗口中。你应养成一直提供父母的习惯:
self.design = tk.Button(self, ...)
您没有在DesignWindow
中显示如何创建任何小部件,但我猜您犯了同样的错误。您需要确保所有窗口小部件都有一个显式父窗口,否则它们将最终位于根窗口中。