Toplevel显示前一帧中的内容

时间:2016-12-09 20:04:35

标签: python tkinter

我有一个Toplevel类DesignWindow,当我按照这里讨论的方式调用它时,它包含一个10x10的按钮数组:Tkinter; Toplevel in a new class它在最后一个内创建窗口。

example

我做错了什么?唯一的区别是我的根源'窗口(带菜单)是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)

1 个答案:

答案 0 :(得分:1)

我不确定答案中是否有足够的代码可以肯定地知道,但我肯定会立即看到两个错误。

首先,MenuScreen没有调用它的超类__init__。您需要将其添加到MenuScreen.__init__

tk.Frame.__init__(self, parent)

其次,您没有向MenuScreen中的小部件提供父级,因此它们会添加到根窗口中。你应养成一直提供父母的习惯:

self.design = tk.Button(self, ...)

您没有在DesignWindow中显示如何创建任何小部件,但我猜您犯了同样的错误。您需要确保所有窗口小部件都有一个显式父窗口,否则它们将最终位于根窗口中。