当我给某些东西()参数* args时,有人会花一点时间解释为什么这段代码有效吗?似乎没有它就可以工作,因为没有任何参数就会调用某些东西......难倒......
from Tkinter import *
mGui = Tk()
mGui.geometry('570x130+700+200')
mGui.resizable(width = FALSE, height = FALSE)
mGui.title('Title')
def something(*args):
if someValue.get() == 'tom':
mLabel2.lift()
else:
mLabel2.lower()
mylist = ['henry', 'tom', 'phil']
someValue = StringVar()
someValue.trace('w', something)
mLabel = Label(text = ' name:')
mLabel.grid(row = 0, column = 0, sticky = E)
mLabel2 = Label(text = 'Success')
mLabel2.grid(row = 0, column = 0, sticky = E)
mLabel2.lower()
someMenu = OptionMenu(mGui, someValue, *mylist)
someMenu.grid(row = 0, column = 1, sticky = W)
someMenu.config(width = 14, anchor = W)
mGui.mainloop()
**编辑,程序将初始化,但是一旦我从someMenu中选择一个值,它就会抛出TypeError:something()不带参数(给定3个)
答案 0 :(得分:3)
根据Tcl trace
documentation,使用3个参数调用trace
的回调函数:name1
,name2
,op
。
所以回调函数应该遵循以下形式:
def callback(name1, name2, op):
pass
但是,在问题代码中,something
不使用任何参数。因此函数使用abitrary argument list(*args
)隐式忽略它们。