Tkinter 콜백으로 실행되는 함수에서 반환 된 객체 (또는 변수 등은 모두 기본적으로 같지만 그렇지 않습니다.)를 어떻게 얻을 수 있습니까?Python - Tkinter 콜백에서 돌아 가기
import Tkinter as Tk
from functools import partial
def square(x):
return x*x
root = Tk.Tk()
var = Tk.IntVar(root, value=0) #the variable the gets passed to the class call
menu = Tk.OptionMenu(root, var, *[0,1,2,3,4,5]) #a drop-down list to choose a value for the variable
menu.pack()
button = Tk.Button(root, text='click', command = partial(square,var.get())) #a button that calls the class
button.pack()
root.mainloop()
명백히 간단한 예입니다. 실제로 버튼에 의해 호출 된 함수는 객체를 반환 할 것이고, 추가 작업을 위해 기본 파이썬 네임 스페이스에 보관 될 객체 목록에 추가하고 싶습니다.
어쨌든 여기에서 사용자는 GUI를 사용하여 함수에 대한 인수를 선택하고 함수를 실행할 단추를 누를 수 있습니다. 그러나 함수의 반환 값은 콜백이 반환을 허용하지 않으므로 오더에 손실 될 것으로 보입니다. 이것은 square(x)
의 정의에서 추악한 global
을 사용하지 않고 극복 할 수 있습니까?
실제로 'partial'내부의'var.get()'에 대한 호출이 실제로 작동하지 않을 수도 있습니다. 버튼을 클릭했을 때가 아니라 버튼을 만들 때 평가되기 때문입니다. 이 구름이 문제가되게하지 마라. 나의 질문은 정말로 'square (x)'에서 버튼으로 되돌아가는 것에 관한 질문이다. –
'partial'에 대한 호출을'lambda' 함수로 바꾸면됩니다 :'command = lambda x = var.get() : square (x)'. var.trace()를 설정할 수도있다. –