2

我正在尝试启动一个 Tkinter 应用程序,该应用程序遵循Tkinter Gui 中的 Class 菜单以保持整洁,但也为按钮栏、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()

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

4

1 回答 1

1

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()

在这里我改变parentselfself是框架本身,而不是整个顶层窗口。通过pack()功能,我将按钮打包在其父级中,在本例中为 Frame。

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

于 2012-04-18T01:41:02.777 回答