为什么此代码只适用于something()中的*args?

2024-04-24 06:37:30 发布

您现在位置:Python中文网/ 问答频道 /正文

当我给something()参数*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()

**Edit,程序将初始化,但只要我从someMenu中选择一个值,它就会抛出TypeError:something()不带参数(给定3个)


Tags: false参数情况argscolumnwidthsomethinggrid
1条回答
网友
1楼 · 发布于 2024-04-24 06:37:30

用3个参数调用trace的回调函数:name1name2op,根据Tcl ^{} documentation。你知道吗

因此回调函数的形式如下:

def callback(name1, name2, op):
    pass

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

相关问题 更多 >