http://effbot.org/tkinterbook/tkinter-dialog-windows.htmに基づくcustomDialogというクラスを使用しています。
標準コードは、サブクラスを作成するクラスを作成し、Toplevel
モーダルダイアログを作成します。モードレスダイアログも作成できるようにコードを調整しようとしています。標準コードはToplevel
コンストラクターを呼び出し、ダイアログを作成し self.wait_window(self)
てから最後に実行します。これは、ダイアログウィンドウが閉じられるまで待機します。しかし、私は成功していません。
私の素朴な試みは、単にスキップすることでしたwait_window()
(これは、以下に抜粋した私のコードの試みです)。他にもいくつか試しましたが、ダイアログはモーダルのままです。つまり、アプリケーションのメインウィンドウを操作できません。何がそれをモーダルにすることを強制していますか?ダイアログには、通常、ウィジェットといくつかのボタンが含まれています。
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)