菜单命令的意外行为链接到功能

时间:2011-11-23 06:21:52

标签: python function menu tkinter

以下是一个Python脚本,用于显示菜单(文件,选项),其中选项用于启动函数conf。 正如我所假设的那样,只有在按下相应的菜单小部件时才会执行conf fun。 这意味着'哈哈'只会在我按选项/编辑组合列表时打印,类似'nana'只会在我按选项/编辑列表

时打印

但是,当我启动脚本top.py时,'haha'和'nana'将以start开头。这是因为conf函数在开始时执行了两次。这是出乎意料的。请指教。

错误似乎出现在以下声明中:

  

menu_option.add_command(label =“编辑补偿列表”,命令= conf('comp'))   menu_option.add_command(label =“编辑pvt列表”,命令= conf('pvt'))

代码: -

#File name :top.py
from Tkinter import *
import ttk

def conf(section):
    if section == 'comp':
        print 'haha'
    if section == 'pvt':
        print 'nana'
    pass

root = Tk()
root.title("NRUNTEST GUI VERSION 1")

menuframe = Frame(root)
menuframe.grid(column=0,row=0)
menuframe.columnconfigure(0,weight=1)
menuframe.rowconfigure(0,weight=1)

buttonh = ttk.Button(root, text='Quit',command=root.quit)
buttonh.grid(row=2, column=2, sticky=(E,W))

menubar = Menu(menuframe)
menu_file = Menu(menubar, tearoff=0)
menu_option = Menu(menubar, tearoff=0)
menubar.add_cascade(menu=menu_file, label='File')
menubar.add_cascade(menu=menu_option, label='Option')
**menu_option.add_command(label="Edit Comp List",command=conf('comp'))**
menu_option.add_separator()
**menu_option.add_command(label="Edit pvt List",command=conf('pvt'))**
menu_file.add_separator()

root.config(menu=menubar)


root.mainloop()

1 个答案:

答案 0 :(得分:3)

您的错误非常简单:

menu_option.add_command(label="Edit Comp List",command=conf('comp'))

当你传递这个论点时:

command=conf('comp')

你实际上没有传递它。您正在传递conf('comp')结果作为您的函数。该函数的结果是print语句,这是您观察到的。

尝试为每种情况制作单独的功能,并添加如下命令:

command=function_name