3
我使用的是一個名爲customDialog的類,它基於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)
非常感謝答案。重新提到你提到的評論,我必須仔細閱讀它幾次,並且不瞭解它的意義。 –