2014-06-22 2 views
0

저는 Dialog라는 이름의 간단한 클래스를 만들고 있습니다. 초기화 메서드가 이미 완료되었을 때만 반환하고 싶습니다.Tkinter 이벤트로 스크립트를 일시 중지하는 방법은 무엇입니까?

from tkinter import * 
class Dialog: 
    def __set_data(self): 
     self.data = self.entry_.get() 
     self.top.destroy() 
    def __init__(self, prompt_text = "Prompt:", submit_text = "OK", text_size = 5, button_size = 5, main_window = Tk()): 
     main_window.withdraw() 
     top = self.top = Toplevel(main_window) 
     Label(top, text=prompt_text).pack() 
     self.entry_ = Entry(top) 
     self.entry_.pack(padx = text_size) 
     button = Button(top, text = submit_text, command = self.__set_data) 
     button.pack(pady=button_size) 

    def get_data(self): 
     return self.data 
    data = 0 

a = Dialog(); 
print (a.get_data()) 

이 코드를 실행하면 출력이 0이됩니다. 사용자 입력 후 출력 만 표시하고 싶습니다. 어떻게해야합니까?

답변

1

첫째, 나는 당신이 실제로 __init__ 메서드를 연기하기를 원한다고 생각하지 않습니다. 그렇게하면 코드는 결코 tk.mainloop()이되지 않으며 화면에 실제로 표시되지 않습니다.

위젯 대신 Entry 위젯의 데이터가 변경되면 알림 메시지가 표시됩니다. 이것은 GUI 툴킷에서 할 수있는 아주 일반적인 일입니다. tkinter가 처리하는 방법은 Events와 Bindings입니다. 일반적으로 그들에 대해 읽을 수 있습니다 here.

특정 작업 (사용자가 변경 한 self.entry에 데이터 표시)을 수행하는 한 가지 방법은 shown in this question 메서드를 사용하는 것일 수 있습니다.

또는 제출 버튼 (see here)에 command을 추가하고 해당 메소드의 항목 값을 읽을 수 있습니다.

+0

미안하지만, 파이썬에 새로 온 사람과 나의 모국어가 영어가 아닌. 추가 할 정확한 코드를 질문에 추가 할 수 있습니까? –

+0

나는 무엇을 해야할지 모른다! –

+0

@LucasHenrique 처음에는'__set_data' 메쏘드에서 데이터를 출력하려고 시도 할 수있었습니다. 그보다 더 복잡한 것에 대해서는, Tk의 이벤트/콜백이 어떻게 작동하는지에 대한 꽤 좋은 개요를 제공하기 때문에 내가 링크 된 effbot 기사를 살펴볼 가치가 있습니다. – sapi

관련 문제