Tkinter - 包含按钮的类

Col*_*vel 2 python tkinter

我有一个Tkinter应用程序,我想在框架中包含一些按钮,然后将此框架放在主窗口中.

但是,运行代码只返回一个空窗口.所以我想我完全错过了如何Tkinter使用模块化类构建应用程序..原子代码是:

import Tkinter as tk

class MainApplication(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)
        self.parent = parent
        self.navbar = NavBar(self)
        self.navbar.grid(row=0, column=0)

class NavBar(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.parent = parent
        self.fetchDataBtn = tk.Button(self, text='Fetch data')
        self.filterDataBtn = tk.Button(self, text='Filter data')

        self.fetchDataBtn.pack(padx=5, pady=10, side=tk.LEFT)
        self.filterDataBtn.pack(padx=5, pady=20, side=tk.LEFT)

def main():
    root = tk.Tk()
    app = MainApplication(root)
    root.mainloop()

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

因此我想知道我想念的是什么.我搜索但找不到重复..(如果他们是一些,你可以指出,我将关闭主题).

注意:我使用的是Python 2.7.10

Rig*_*leg 5

问题是您没有打包(或网格或放置)您的MainApplication实例.由于您MainApplication扩展了tk.Frame类,因此它的实例是小部件,因此需要打包到它们的主服务器中.

def main():
    root = tk.Tk()
    app = MainApplication(root)     <--- here: where does it go in the root?
    root.mainloop()
Run Code Online (Sandbox Code Playgroud)

打包它会起作用:

app.pack()
Run Code Online (Sandbox Code Playgroud)