2013-05-04 31 views
0

以下是生成一個帶有一個標籤「做某事」的Tkinter菜單。運行腳本會立即生成「完成」輸出,這意味着甚至在單擊「執行某些」菜單標籤之前也是如此。這是爲什麼?我對@staticmethod做錯了什麼? 感謝預期。在add_commandTkinter菜單命令行動之前進行調用,爲什麼?

import Tkinter 

class AppMenu(object): 

    def __init__(self, master): 
    self.master = master 
    self.file_content = "initialised" 
    self.menu_bar(self.file_content) 

    def menu_bar(self, file_content): 
    menu_bar = Tkinter.Menu(self.master) 
    self.menu_bar = Tkinter.Menu(self.master) 
    self.master.config(menu=self.menu_bar) 
    self.task_menu = Tkinter.Menu(self.menu_bar, tearoff = False) 
    self.task_menu.add_command(label = "do something", command = Convert.do(self.file_content)) 
    self.menu_bar.add_cascade(label = "Task", menu = self.task_menu) 

class Convert(object): 
    @staticmethod 
    def do(text): 
    print "done" 


root = Tkinter.Tk() 
Menu = AppMenu(root) 
root.mainloop() 

回答

1

command參數預計功能(或東西Callable)。
您沒有將功能Convert.do傳遞到add_command,您傳遞的結果是調用Convert.do(self.file_content)而不是它。
傳遞一些參數Convert.doself.file_content你的情況),您可以使用lambda

command=lambda self=self: Convert.do(self.file_content) 
相關問題