为什么ttk.Button出现在主窗口而不是tk.Toplevel?

时间:2016-02-06 14:16:13

标签: python tkinter

我有一个主UI,它实例化如下:

class MyApp(ttk.Frame):
    def __init__(self, master):
        ttk.Frame.__init__(self, master)
        (...)

    def make_gui(self):
        (...)
        self.helpButt = ttk.Button(self.InnerRightFrm2, padding=(0, 0),
                                   text='Help', image=help_icon
                                   compound='left', command=self.show_help)
        (...)

def main():
    root = tk.Tk()
    root.title('Myapp')
    root.columnconfigure(0, weight=1)
    root.rowconfigure(0, weight=1)
    root.resizable(True, True)
    root.update()
    gui = MyApp(root)
    gui.mainloop()

当用户点击主界面上的Show help按钮时,应显示新的Toplevel窗口。此窗口的Toplevel包含两个框架:topFrame0上的row=0topFrame1上的row=1。我在topFrame1内创建第三个框架以放置"关闭"按钮输入。我是这样做的:

def show_help():
    top_win = tk.Toplevel()
    top_win.title('Help')
    top_win.resizable(0, 0)

    topFrame0 = ttk.Frame(top_win, borderwidth=2, relief='groove')
    topFrame0.grid(row=0, column=0, sticky='nsew')
    topFrame1 = ttk.Frame(top_win, borderwidth=2, relief='flat')
    topFrame1.grid(row=1, column=0, sticky='nsew')
    buttonFrame = ttk.Frame(topFrame1, borderwidth=2, relief='groove').grid()
    ttk.Button(buttonFrame, padding=(0, 2), text='Close', command=top_win.destroy).grid(sticky='e')

然而,不是出现在Toplevel窗口的右侧按钮中(请注意屏幕截图中的红色箭头),"关闭"按钮显示在主MyApp窗口的右下角!这怎么可能发生?

enter image description here

1 个答案:

答案 0 :(得分:2)

排队

buttonFrame = ttk.Frame(...).grid()

您将None分配给buttonFrame,因为grid()会返回None,因此您稍后会ttk.Button(None, ...)并向主窗口添加按钮。

你需要

buttonFrame = ttk.Frame(...)
buttonFrame.grid()