2014-03-28 4 views
0

버튼을 통해 함수에 매개 변수를 전달하는 방법은 무엇입니까?Python Tkinter - 버튼으로 값 전달하기

variable = str() 

def RandomFunction(variable): 
    print (variable) 

EntryBox = Entry(MainWindow, textvariable = variable).pack() 
FunctionCall = Button(MainWindow, text="Enter", command=RandomFunction(variable)) 

버튼을 누르면 아무 것도 인쇄되지 않는 것처럼 보입니다. 나는 주변을 수색했는데 lambda을 사용하면 그것을 고칠 수 있고 (변수)를 함수에 전달할 수 있지만 lambda variable:variable으로 실험 한 후에도 여전히 작동하도록 할 수 없다.

+0

변수는 무엇입니까? 이 코드에는 정의되어 있지 않습니다. –

+0

문자열, 시작시 초기화 됨 – user3091974

+0

내 대답은 어떻습니까? 나는 당신이'lambda '를 올바르게 사용하고 있다고 생각하지 않는다. –

답변

1

다른 답변의 작업 effbot 페이지에서,하지만 인생에서 많은 것들처럼, 당신이하려고하는 일을 할 수있는 하나 개 이상의 방법이있다.

질문의 코드는 실제로 엔트리 위젯에서 데이터를 가져 오는 몇 가지 방법을 혼합합니다. 당신은 textvariable과 lambda를 사용하고 있지만, 하나만 있으면됩니다.

variable = StringVar() 

귀하의 항목 위젯은 괜찮습니다, 그건 :

는 첫째,이 같은 Tkinter의 문자열 유형의 사용자 변수를 확인해야합니다 : 람다가 덮여있다처럼, 그래서 여기하면 textVariable에 대한 신속한 답변 것 같다 StringVar()에 연결됩니다. RandomFunction()에 인수를 전달할 필요가 없기 때문에 버튼에 람다가 필요하지 않습니다.

def RandomFunction(): 
    print(variable.get()) 
:

FunctionCall = Button(MainWindow, text='Enter', command=RandomFunction).pack() 

마지막으로, 당신의 함수는 더 이상 인수를 복용하지 있기 때문에, 그냥이 호출 할 때마다 StringVar()에 갔지() 메소드를 사용하는 것, 약간의 재 작업이 필요합니다

StringVar()에 대한 자세한 내용은 여기를 참조하십시오. http://effbot.org/tkinterbook/variable.htm

+0

나는 또한 그 방법을 시도했다, 나는 오류 메시지가 나타납니다 : 속성 오류 : 'str'개체에 'get'속성이 없습니다. – user3091974

+0

그런 다음'.get()'을 제거해보십시오. 때로는 간단한 디버깅이 필요할 수 있습니다. – atlasologist

+0

하지만 그때 함수 내에서 변수에 액세스 할 수 없습니다 – user3091974

1

(만큼 당신이 제대로처럼) 인수와 함수가 괜찮 호출하는 함수를 만들 lambda 사용 :

FunctionCall = Button(MainWindow, text="Enter", command=lambda: RandomFunction(EntryBox.get)) 

lambda 어떤을하지 않기 때문에 파이썬이 만족하실 것입니다 인수.

+0

나는 그것을 시험해 보았지만 어떤 오류도 나타나지 않으면 서 여전히 인쇄 된 것이 비어있는 것 같습니까? – user3091974

+0

음, 물론 그렇지 않습니다. 문자열을 실제 값으로 설정하지 않았으므로 아무것도 나타나지 않습니다. 변수를''Hello, world! ''와 같이 설정하고 무슨 일이 일어나는 지보십시오. –

+0

입력 위젯은 텍스트를 입력 할 수있는 항목으로,이 항목을 변수에 할당합니다. 입력 상자에 텍스트를 입력했지만 버튼을 눌렀을 때 여전히 인쇄되지 않습니다. – user3091974

1

.get()을 사용하여 항목의 내용을 가져옵니다. 여기 http://effbot.org/tkinterbook/entry.htm

from Tkinter import * 

master = Tk() 

e = Entry(master) 
e.pack() 
e.focus_set() 

def callback(): 
    print e.get() 

b = Button(master, text="get", width=10, command=callback) 
b.pack() 

master.mainloop() 
+0

이 또한 작동합니다. 감사합니다. – user3091974