Skip to main content
 首页 » 编程设计

python之Tkinter GUI 中的菜单、按钮等栏

2025年05月04日23duanxz

我正在尝试启动一个遵循 Class menu in Tkinter Gui 的 Tkinter 应用程序为了整洁,但也为例如添加此功能。按钮栏、RadioButton 栏等。类似于:

from Tkinter import * 
 
def clickTest(): 
    print "Click!" 
 
class App(Tk): 
    def __init__(self): 
        Tk.__init__(self) 
        menuBar = MenuBar(self) 
        buttonBar = ButtonBar(self) 
 
        self.config(menu=menuBar) 
        buttonBar.grid(row=0, column=0) ??? 
 
class MenuBar(Menu): 
    def __init__(self, parent): 
        Menu.__init__(self, parent) 
 
        fileMenu = Menu(self, tearoff=False) 
        self.add_cascade(label="File", menu=fileMenu) 
        fileMenu.add_command(label="Exit", command=clickTest) 
 
class ButtonBar(Frame): 
    def __init__(self, parent): 
        Frame.__init__(self, parent) 
 
        firstButton = Button(parent, text="1st Button", command=clickTest) 
        secondButton = Button(parent, text="2nd Button", command=clickTest) 
 
if __name__ == "__main__": 
 
    app = App() 
    app.mainloop() 

但我不确定如何让所有这些都显示在同一个窗口中。当然,按原样编写代码是行不通的。任何建议表示赞赏。谢谢!

请您参考如下方法:

是用 pack() 做的。我相信它也可以用 grid() 来完成,但我不太熟悉它。

from Tkinter import * 
 
def clickTest(): 
    print "Click!" 
 
class App(Tk): 
    def __init__(self): 
        Tk.__init__(self) 
        menuBar = MenuBar(self) 
        buttonBar = ButtonBar(self) 
 
        self.config(menu=menuBar) 
        buttonBar.pack() 
 
class MenuBar(Menu): 
    def __init__(self, parent): 
        Menu.__init__(self, parent) 
 
        fileMenu = Menu(self, tearoff=False) 
        self.add_cascade(label="File", menu=fileMenu) 
        fileMenu.add_command(label="Exit", command=clickTest) 
 
class ButtonBar(Frame): 
    def __init__(self, parent): 
        Frame.__init__(self, parent) 
 
        firstButton = Button(self, text="1st Button", command=clickTest).pack() 
        secondButton = Button(self, text="2nd Button", command=clickTest).pack() 
 
if __name__ == "__main__": 
 
    app = App() 
    app.mainloop() 

另一件事是,您应该将按钮的父级设置为 Frame,如下所示:

firstButton = Button(self, text="1st Button", command=clickTest).pack() 

在这里,我将parent 更改为self。 self 是框架本身,而不是整个顶层窗口。使用 pack() 函数,我将按钮打包到它的父级中,在本例中是 Frame。

然后使用 buttonBar.pack() 我将 buttonBar 打包到顶层窗口中。您也可以在此处和框架中使用网格。