Я использую класс под названием customDialog, основанный на основе http://effbot.org/tkinterbook/tkinter-dialog-windows.htm
Стандартный код создает класс, который подклассы 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)