【问题标题】:Unexpected Behavior of menu command link to function菜单命令链接到函数的意外行为
【发布时间】:2012-01-04 12:04:01
【问题描述】:

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

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

错误似乎出现在以下语句中:

menu_option.add_command(label="Edit Comp List",command=conf('comp')) menu_option.add_command(label="Edit pvt List",command=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()

【问题讨论】:

    标签: python function menu tkinter


    【解决方案1】:

    你的错误很简单:

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

    当你传递这个参数时:

    command=conf('comp')
    

    你实际上并没有通过它。您将 conf('comp')result 作为函数传递。该函数的结果是print 语句,这就是您所观察到的。

    尝试为每种情况创建单独的函数并添加如下命令:

    command=function_name
    

    【讨论】:

    • 嘿@Blender:我确实尝试过使用单独的功能。它有效。但是我的实际功能非常庞大,主要是基于传递的“节”变量进行通用操作。无论如何我可以使用单数函数并传递一个字符串吗?
    • 当然,使用 lambda。不是传递 command=conf("comp") 作为参数,而是传递 command=lambda: conf("comp")。
    猜你喜欢
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多