2014-02-06 107 views
1

有人會介意花一點時間來解釋爲什麼這段代碼工作時,我給的東西()參數*參數?這好像應該沒有它的工作,因爲一些被稱爲不帶任何參數... ..難倒爲什麼這個代碼只能在*()中使用* 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它選擇一個值拋出類型錯誤:東西()不帶任何參數(3給出)

回答

3

回調函數的trace被稱爲與3參數:name1name2,根據Tcl trace documentationop

因此回調函數應該如下形式:

def callback(name1, name2, op): 
    pass 

但是,代碼有問題,something不使用任何參數。所以函數使用abitrary argument list*args)隱式忽略它們。

+0

謝謝,這解釋了它! – wonderstruck80

相關問題