2012-04-18 3 views
2

Я пытаюсь запустить приложение Tkinter, которое следует за Class menu in Tkinter Gui для аккуратности, но также добавляет эту функциональность, например. Кнопка бары, RadioButton бары и т.д. Что-то вроде:Меню, кнопка и т. Д. Бары в Tkinter GUI

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

Но я не уверен, как получить все это, чтобы показать в том же окне. Конечно, код as-is не работает. Любые предложения приветствуются. Благодаря!

ответ

0

Сделал это с 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() 

Другое дело, вы должны установить кнопки родителя, как кадр, как в этой строке:

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

Здесь я изменил parent с self. self - это сама рамка, а не полное окно верхнего уровня. И с помощью функции pack() я упаковал кнопку в ее родительской, которая в этом случае является рамкой.

Затем с buttonBar.pack() я упаковал кнопку Бара в верхнем окне. Вы также можете использовать сетку здесь и в кадре.

+0

Прохладный. Благодарю. Да, я тоже понял это с помощью grid(). Спасибо за последнее предложение родителя кнопки - это исправило это для меня. – Ryan

Смежные вопросы