Wpis z mikrobloga

Nigdy nie bawilem sie w robienie GUI oraz programowanie obiektowe. Teraz zostalem rzucony na goraca wode i nie rozumiem nawet podstaw. Dlaczego to nie dziala? Chcialbym aby okienko About pojawialo sie po kliknieciu elementu About w Help menu, niestety pojawia sie od razu po uruchomieniu programu, nawet zanim glowne okienko sie pojawi.

import Tkinter as tk
import tkMessageBox

class FileMenu(tk.Menu):
def __init__ (self, parent):
tk.Menu.__init__(self, parent, tearoff=False)
self.add_command(label='Exit', command=self.quit)

class HelpMenu(tk.Menu):
def __init__ (self, parent):
tk.Menu.__init__(self, parent, tearoff=False)
self.add_command(label='About', command=tkMessageBox.showinfo("Information","Informative message"))

class MainMenu(tk.Menu):
def __init__ (self, parent):
tk.Menu.__init__(self, parent, tearoff=False)
self.file_menu = FileMenu(self)
self.help_menu = HelpMenu(self)
self.add_cascade(label='File', menu=self.file_menu)
self.add_cascade(label='Help', menu=self.help_menu)

class View:
def __init__ (self, parent):
self.frame = tk.Frame(parent)
self.parent = parent
self.menu = MainMenu(self.frame)
self.parent.configure(menu=self.menu)
self.parent.geometry('800x400')
self.frame.pack(fill='both', expand=True)

class App:
def __init__ (self):
self.root = tk.Tk()
self.view = View(self.root)

def run (self):
self.root.title('FTP file uploader')
self.root.mainloop()

if __name__ == '__main__':
app = App()
app.run()

#python #tkinter #tcltk
  • 6
jeszcze widzę że ten messagebox nie miał się raczej pojawiać przy starcie, więc musiałbyś command przerobić na lambdę.

@croppz: ooo wlasnie o to mi chodzi. Czyli po prostu musze tam dodac lambda: przed messagebox?