2

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

しかし、これらすべてを同じウィンドウに表示する方法がわかりません。もちろん、コードはそのままでは機能しません。任意の提案をいただければ幸いです。ありがとう!

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

もう 1 つのことは、次の行のようにボタンの親を Frame として設定する必要があることです。

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

ここで私は で変更parentしましselfた。selfトップレベル ウィンドウ全体ではなく、Frame 自体です。そして、pack()関数を使用して、この場合はフレームである親にボタンをパックしました。

次にbuttonBar.pack()、トップレベルウィンドウにボタンバーを詰め込みました。ここと Frame で grid を使用することもできます。

于 2012-04-18T01:41:02.777 に答える