나는 기반 사용자 정의 다이얼로그를 기반으로합니다 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)
감사합니다. 다시 말하면, 내가 몇 번 읽었을 지 모르겠지만 그 의미를 이해하지 못했을 것입니다. –