2014-06-16 13 views
1

나는 간단한 Python-Tkinter 응용 프로그램을 만들고 있습니다. 다음은 지금 가지고있는 코드의 단순화입니다.Tkinter : optionmenu 위젯을 사용하여 함수를 호출하는 방법

from Tkinter import * 
root = Tk() 

def function(x): 

    if x == "yes": 
     a.set("hello") 
    else: 
     a.set("bye") 

#----------------------------- 

a = StringVar() 
a.set("default") 

oc = StringVar(root) 
oc.set("Select") 
o = OptionMenu(root, oc, "yes", "no", command=function) 
o.pack() 

z = a.get() 
print z # prints default 

root.mainloop() 

은이 코드는 콘솔에 "여보세요"또는 "안녕"인쇄 할 대신은 "기본값은"인쇄합니다.

나는이 작품을 만들려고했지만 어떻게 든 나는 그것을 알아낼 수 없다.

z = function("yes") 
print z #prints hello 

나 : 내가 Optionmenu 위젯을 사용하는 대신 직접 함수를 호출하는 경우 코드는 잘 작동

z = function("no") 
print z #prints bye 

이 때 "안녕" "안녕"인쇄하거나하지 않는 이유 누군가가 설명 할 수 Optionmenu 위젯을 사용합니다. 그리고 라인 위의 파트를 변경하지 않고 변수 z를 사용할 수 있도록 수정하는 방법은 무엇입니까?

감사합니다.

답변

1
from Tkinter import * 
root = Tk() 

a = StringVar() 
a.set("default") 

oc = StringVar(root) 
oc.set("Select") 

def function(x): 

    if x == "yes": 
     a.set("hello") 
     print a.get() 

    else: 
     a.set("bye") 
     print a.get() 

o = OptionMenu(root, oc, "yes", "no", command=function) 
o.pack() 


z = a.get()  
print z 

root.mainloop() 

OptionMenu는 OptionMenu 선택이 변경 될 때 지금 function을 실행 - 옵션 메뉴가 "예"읽는 경우 function은 "예"의 매개 변수와 함께 실행하고, 설정 a "안녕하세요"와 안녕 "a로 설정합니다 "다른 모든 옵션을 선택하십시오.

+0

죄송합니다. 제 원래 질문을 편집했는데, 서브 함수가 결국 필요하지 않았습니다 ... 답변 해 주셔서 감사합니다! 하지만 어떻게 z = "bye"를 z = "hello"로 바꾸려면 Optionmenu 위젯을 사용하면 될까요? – Roundhouse

+0

지금 그것을 확인하십시오. 당신이해야 할 일은 어떤 조건에 따라 변경되도록'function'을 설정하는 것입니다 - 그것은 현재 선택된 옵션을 입력으로 가져옵니다. 'z'는 항상 함수의 범위 밖에서'default'를 반환 할 것이므로 - 함수의 범위 내에서'a.get()'을 출력하십시오. – JoshieSimmons

+0

그래서 (함수 내부에서 변경된) 변경된 값을 z (함수 외부)에 할당 할 수 없습니까? – Roundhouse

관련 문제