2015-01-29 2 views
1

사용자에게 지시 할 수있는 메시지 상자가있는 프로그램이 있습니다. 그러나 메시지 상자를 닫은 후에 엔트리 위젯에 입력 할 수 없습니다. 누구에게 문제가 될 수있는 아이디어가 있습니까?tkinter messagebox는 Entry 위젯이 작동하지 못하도록합니다.

내 코드 :

from tkinter import * 
import random 
import tkinter.messagebox 

class Application(Frame): 
    """ GUI aplication hoger of lager""" 
    def __init__(self,master): 
     """Instaleerd het Frame""" 
     super(Application, self).__init__(master) 
     self.grid() 
     rarara=0;aantal=0;max_pogingen=10;ikdenkaan=random.randrange(1,100) 
     self.main() 

    def welkom(self): 
     """Create Widgets voor het spelletje hoger of lager""" 
     #Verwelkomingslebels en instructielabels 
     msgb=tkinter.messagebox.showinfo("uitleg", 
             "Welkom bij het spelletje'hoger of lager'.\nIk heb zojuist aan een getal tussen 1 en 100 gedacht.\nJij mag dat getal raden en je hebt 10 pogingen." 
             ) 

    def labels(self): 
     #ik denk aan label 
     Label(self, 
       text="Ik denk aan:" 
      ).grid(row=0,column=0,sticky=W) 


    def welkgetal(self): 
     rarara=Entry(self) 
     rarara.grid(row=0, column=1,sticky=W) 
     rarara.configure(state="normal") 


    def main(self): 
     self.welkom() 
     self.labels() 
     self.welkgetal() 

root=Tk() 
root.title("Hoger of lager") 
root.geometry("350x280+533+244") 
app=Application(root) 
root.mainloop() 

답변

3

것 같다 해당 이벤트 처리를위한 정말 이상한 방법으로 TK에 모달 창 동작합니다 :

[0] Python tkinter: stopping event propagation in text widgets tags

[1] http://tiku.io/questions/3361808/python-tkinter-bind-breaking

수정본 :

class Application(Frame): 
    """ GUI aplication hoger of lager""" 
    def __init__(self,master): 
     """Instaleerd het Frame""" 
     super(Application, self).__init__(master) 
     self.grid() 
     rarara=0;aantal=0;max_pogingen=10;ikdenkaan=random.randrange(1,100) 
     self.main() 
     master.after(1, self.welkom) 

    def main(self): 
     self.labels() 
     self.welkgetal() 

이유는 모르겠지만 작동합니다.

+0

"왜 그런지 모르겠다"는별로 유용하지 않습니다. 또한 "이벤트 처리를위한 이상한 방법"은 모달 창과는 아무런 관련이 없습니다. 즉, '후'를 통해 '셀프. 웰콤'이라고하는 당신의 충고는 좋은 것입니다. 그 이유는 모달 윈도우를 열기 전에 이벤트 루프를 실행해야하기 때문입니다. 'after (1 ...) '대신'after_idle (...)'을 사용할 수 있는데, 개념적으로 "tkinter 초기화가 끝나고 이벤트 루프가 시작되었을 때"를 의미합니다. –

+0

감사합니다. 그것은 작동합니다. – tuin2121

관련 문제