为什么这段代码只能用于某些东西()中的* args?

时间:2014-02-06 06:24:51

标签: python function tkinter arguments

当我给某些东西()参数* 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个)

1 个答案:

答案 0 :(得分:3)

根据Tcl trace documentation,使用3个参数调用trace的回调函数:name1name2op

所以回调函数应该遵循以下形式:

def callback(name1, name2, op):
    pass

但是,在问题代码中,something不使用任何参数。因此函数使用abitrary argument list*args)隐式忽略它们。