很抱歉提出这样一个基本问题(我是Tkinter的初学者)。我正在使用面向对象的程序来开发具有多个窗口的应用程序:一个主要窗口,以及其他模态。
我通过这种方式实现主类:
if __name__ == "__main__":
gWinMain = cMainFrame(tk.Tk())
gWinMain.mainloop()
使用cMainFrame:
class cMainFrame(tk.Frame):
def __init__(self, master=None):
super().__init__(master, width=WIN_ROOT_WIDTH, height=WIN_ROOT_HEIGHT)
self.master.title(WIN_ROOT_TITLE)
self.master.resizable(False, False)
self.master.geometry(str(WIN_ROOT_WIDTH) + 'x' + str(WIN_ROOT_HEIGHT))
self.grid()
在此__init__
中,我创建了其他小部件(菜单,标签,画布等)。没问题。
菜单选项应显示不同的模态窗口,这些窗口是多个类。
例如,在cMainFrame
中,我有一个绑定在菜单选择上的方法:
def emnuFretBoard(self):
cFretBoardFrame(tk.Toplevel(self))
cFretBoardFrame
是:
class cFretBoardFrame():
def __init__(self, master):
super().__init__()
self.master = master
self.master.title(WIN_FRETBOARD_TITLE)
self.master.resizable(False, False)
self.master.geometry(str(WIN_FRETBOARD_WIDTH) + 'x' + str(WIN_FRETBOARD_HEIGHT))
self.master.grab_set()
这种小体系结构有效,将显示一个新的模式窗口。
问题:当我在Toplevel
的{{1}}窗口上创建窗口小部件时:
__init___
...这些小部件在主窗口(画布上)上创建。
这种架构有什么问题吗?
答案 0 :(得分:1)
您应该为每个小部件指定母版。如果不这样做,则母版默认为根窗口。在这段代码中,您没有设置母版:
self.lblTone = tk.Label(text='Tone', padx=20, pady=2)