python - OptionMenu 命令函数需要参数

标签 python python-3.x tkinter

这是一个关于 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()

我的错误:

TypeError: update() takes 0 positional arguments but 1 was given

简单地定义更新

def update(foo):

似乎有效。但为什么呢?

最佳答案

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

mymenu = OptionMenu(root, optionvar, *t, command=lambda _: update())

关于python - OptionMenu 命令函数需要参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35974203/

相关文章:

python-3.x - python :3. 8-alpine3.11 中的 Scipy 错误 - 未找到 lapack/blas 资源

python-3.x - Python3 Beautifulsoup4 从多个容器兄弟中提取文本

python - 映射和加入 python 列表

python - 计算字符串中子字符串的数量

Python - 重载异步方法

Python Tkinter Canvas 形状在 Canvas 网格化时不显示,但在打包时显示?

python - 如何使用 TkInter 填充或扩展函数与 self?

Python tkinter, Canvas 不显示

python - 第一次写入 CSV 文件后跳过标题(Python)

python - 使用队列迭代汉诺塔,但反向函数表示它未定义