2013-08-31 60 views
0

我想創建一個tkinter OptionMenu,它在更改時編輯另一個OptionMenu。所以,我試圖創建一個command=參數,這使得在OptionMenu的每次更新特定命令的運行,像它的時​​候我用command=參數按鈕,紡紗器等Tkinter OptionMenu命令異常

tl.wktype = OptionMenu(tl,wktypevar, *wk_types,command=typeupdate) 

別的地方的代碼typeupdate()命令 - 目前用於調試目的。

def typeupdate(): 
    typeval = tl.wktype.get() 
    print(typeval) 

例外蟒蛇拋出如下:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__ 
    return self.func(*args) 
    File "C:\Python33\lib\tkinter\__init__.py", line 3300, in __call__ 
    self.__callback(self.__value, *args) 
TypeError: typeupdate() takes 0 positional arguments but 1 was given 

typeupdate()認爲這是給什麼位置參數,如何解決這一問題?

回答

5

給予被點擊的值。爲了演示,考慮這個腳本:

from tkinter import Tk, OptionMenu, StringVar 
root = Tk() 
def func(val): 
    print(val) 
var = StringVar() 
OptionMenu(root, var, "one", command=func).grid() 
root.mainloop() 

運行時(當我點擊的optionmenu選項「一」),它打印「一」的終端。再次

def typeupdate(val): 
+0

您:

所以,總的來說,加val(或任何其他參數名)到你的函數聲明,它是否行得通呢?非常感謝:D – CrushedPixel

+1

@CrushedPixel - 完全沒有問題。另外,正如我的個人資料所說,我專注於Tkinter。因此,關於這個話題的問題是我最喜歡的。 ;) – iCodez

+0

只剩下一個問題了 - 我怎樣才能將它與lambda:command()傳遞給更多的值?例如,我需要一個名爲「tl」的變量來傳遞,但是如果我這樣做了「正常」的lambda方法(command = lambda:cmdname(var,tl)),它會引發類似的異常。 – CrushedPixel