顶级窗口小部件在父窗口上创建

时间:2020-07-19 12:13:05

标签: python-3.x tkinter

很抱歉提出这样一个基本问题(我是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___

...这些小部件在主窗口(画布上)上创建。

这种架构有什么问题吗?

1 个答案:

答案 0 :(得分:1)

您应该为每个小部件指定母版。如果不这样做,则母版默认为根窗口。在这段代码中,您没有设置母版:

self.lblTone = tk.Label(text='Tone', padx=20, pady=2)