2011-10-07 4 views
3

나는 기반 사용자 정의 다이얼로그를 기반으로합니다 http://effbot.org/tkinterbook/tkinter-dialog-windows.htm 표준 코드는 Toplevel을 하위 클래스로 만들고 모달 대화 상자를 만듭니다. 모덜리스 대화 상자를 만들 수 있도록 코드를 수정하려고합니다. 표준 코드는 Toplevel 생성자를 호출하고 대화 상자를 만든 다음 self.wait_window (self)
을 끝에 수행합니다. 대화 상자 창이 닫힐 때까지 기다립니다. 하지만 나는 성공하지 못합니다. 내 순진한 시도는 단순히 wait_window()를 건너 뛰는 것이 었습니다 (이는 아래 코드에서 시도한 것입니다). 몇 가지 다른 시도를했지만 대화 상자가 모달로 유지됩니다. 즉, 응용 프로그램의 기본 창과 상호 작용할 수 없습니다. 그것이 모달이되어야하는 것은 무엇입니까? 대화 상자에는 위젯과 몇 개의 버튼이 포함됩니다.모덜리스 대화 상자 tkinter

class Dialog(Toplevel): 

    def __init__(self, parent, title = None,modal=True): 
     Toplevel.__init__(self, parent) 
     self.transient(parent) 
     if title: 
      self.title(title) 
     self.parent = parent 
     self.result = None 
     body = Frame(self) 
     #register validators 
     self.validatePosInt = (body.register(self.OnValidatePosInt), 
       '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W') 

     self.initial_focus = self.body(body) #this calls the body function which is overridden, and which draws the dialog 
     body.grid() 
     self.buttonbox() 
     self.grab_set() 
     if not self.initial_focus: 
      self.initial_focus = self 
     self.protocol("WM_DELETE_WINDOW", self.cancel) 
     self.geometry("+%d+%d" % (parent.winfo_rootx()+50, 
            parent.winfo_rooty()+50)) 
     self.initial_focus.focus_set() 

     if modal: 
      self.wait_window(self) 

답변

4

self.grab_set()이라는 줄을 제거하십시오. "잡아라"는 모든 사건을 잡고이 창으로 향하게하는 것을 의미합니다.

당신은 당신이 당신이이 정확한 라인을 언급 한 것을 볼 수 있습니다 코드를 가지고 있으며이 왜 웹 페이지에 조금 더 깊게 읽는다면 :

... 다음은 생성자가를 생성 대화 상자 본문을 호출 한 다음 grab_set을 호출하여 대화 상자 모달을 만듭니다.

+0

감사합니다. 다시 말하면, 내가 몇 번 읽었을 지 모르겠지만 그 의미를 이해하지 못했을 것입니다. –

관련 문제