OptionMenu 命令函数需要参数

Pax*_*cum 2 python tkinter python-3.x

这是关于 tkinter 中选项菜单小部件的一个非常普遍的问题。

当定义 OptionMenu 小部件并将函数分配为其命令时,为什么需要参数?

我的代码:

from tkinter import *

def update():
    x = optionvar.get()
    x = str(x)
    mylabel.config(text=x)

root = Tk()

l = []
for n in range(10):
    l.append(n)

t = tuple(l)

optionvar = IntVar()

optionvar.set('hello stackoverflow')

mymenu  = OptionMenu(root, optionvar, *t, command=update)
mylabel = Label(root)

mymenu.pack()
mylabel.pack()
Run Code Online (Sandbox Code Playgroud)

我的错误:

TypeError: update() takes 0 positional arguments but 1 was given
Run Code Online (Sandbox Code Playgroud)

简单地定义更新

def update(foo):
Run Code Online (Sandbox Code Playgroud)

似乎有效。但为什么?

zon*_*ndo 5

回调通常想知道选择了哪个项目,因此 IntVar 的值作为参数传递。如果你想忽略该参数,你可以简单地使用 lambda (_是一个有效的名称,通常用于指示它是一个一次性变量):

mymenu = OptionMenu(root, optionvar, *t, command=lambda _: update())
Run Code Online (Sandbox Code Playgroud)