2013-08-31 4 views
0

OptionMenu이 변경되면 tkinter OptionMenu을 작성하여 다른 OptionMenu을 편집하려고합니다. 그래서 나는 그것이하는 것처럼 내가 버튼 다른, spinbox 등Tkinter OptionMenu 명령 예외

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

어딘가로 command= 인수를 사용할 때 코드가에서 OptionMenu의 모든 갱신에 특정 명령을 실행하게하는 command= 인수를 만들려고 typeupdate() 명령 - 지금 디버그 목적으로 사용합니다. typeupdate() 생각은 위치 무엇 인수를

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 

을 주어 않으며, 나는이 문제를 어떻게 해결합니까 : 예외 파이썬이 발생

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

은 다음과 같다?

답변

5

클릭 한 값이 지정됩니다. 설명하기 위해,이 스크립트를 고려 : 실행하면 (나는 optionmenu에서 옵션 "하나"를 클릭 할 때와)

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

, 그것은 터미널에서 "하나"를 인쇄합니다.

그래서, 요약, 함수 선언에 val (또는 다른 인자 이름)을 추가하고 작동합니다 :

def typeupdate(val): 
+0

당신을 다시? 고맙습니다 D – CrushedPixel

+1

@CrushedPixel - 전혀 문제 없습니다. 또한 필자의 프로필에서 Tkinter를 전문으로합니다. 따라서 그 주제에 관한 질문은 내가 좋아하는 것 중 일부입니다. ;) – iCodez

+0

그냥 한 가지 질문 만 남았습니다 -이 값을 lambda : command()와 결합하여 값 이상을 전달할 수 있습니까? 예를 들어 "tl"이라는 변수도 전달해야하지만, "normal"람다 웨이 (command = lambda : cmdname (var, tl))를 수행하면 비슷한 예외가 발생합니다. – CrushedPixel

관련 문제