调用之前进行的Tkinter菜单命令动作,为什么?

时间:2013-05-04 16:25:20

标签: python menu tkinter static-methods

以下是生成一个带有一个标签“做某事”的Tkinter菜单。运行脚本会立即生成“完成”输出,这意味着甚至在单击“执行某事”菜单标签之前。这是为什么?我对@staticmethod做错了什么? 感谢您的期待。

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 个答案:

答案 0 :(得分:1)

command中的

add_command参数需要函数(或Callable} 您没有将功能Convert.do传递给add_command,而是传递了调用Convert.do(self.file_content)的结果而不是它。
要将一些参数传递给Convert.do(在您的情况下为self.file_content),您可以使用lambda

command=lambda self=self: Convert.do(self.file_content)