Tkinter实现OptionMenu选中项插入Entry框及TypeError报错解决
报错根因
Tkinter OptionMenu组件通过command参数绑定回调时,会自动将当前选中的选项值作为1个位置参数传入回调函数。你定义的show()函数未设置接收该参数的形参,因此触发参数数量不匹配的报错:
TypeError: show() takes 0 positional arguments but 1 was given
修复方法
给show()函数添加接收传值的位置形参即可,修复后代码如下:
from tkinter import * import tkinter root = Tk() root.title('example') root.geometry("500x400") plan = Entry( bd = 0, bg = "#d9d9d9", highlightthickness = 0, font='halvetica 12') plan.insert(tkinter.END, "") plan.pack() clicked = StringVar() clicked.set('Plans') days = ["mon", 'Tue', "WED", "thur"] # 增加形参接收OptionMenu自动传入的选中项值 def show(selected): plan.delete(0, END) # 可直接使用传入的选中值,无需额外调用clicked.get() plan.insert(tkinter.END, selected) drop = OptionMenu(root, clicked, *days, command=show) drop.pack() root.mainloop()
- 如果你不需要使用这个自动传入的参数,也可以将形参命名为
_表示忽略传值,即定义为def show(_):,同样可以解决报错。
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

