Я пишу модуль, в котором я хочу поддерживать всплывающие диалоговые окна, чтобы указывать на ошибки, но мне не нужно или не нужно корневое окно (потому что я хочу, чтобы модуль не зависел от основного графического интерфейса и возможность совместного использования между несколькими вызывающими приложениями). Я попробовал просто сделать это:Использование tkMessageBox без импорта Tkinter
import tkMessageBox
[...stuff...]
if (errorCondition): tkMessageBox.showwarning("My Module","That won't work!")
... но когда я запустил его, рядом с полем сообщения появляется окно с корнем. Я знаю о методе withdraw()
, но так как я никогда не импортировал Tkinter
сам и никогда не создавал экземпляр Tkinter.Tk()
, для меня нет объекта для использования withdraw()
.
Альтернатива, которая работает, чтобы идти вперед и импортировать Tkinter
в любом случае, так что я могу создать корневое окно сам, а затем withdraw()
это:
import Tkinter
import tkMessageBox
root = Tkinter.Tk()
root.withdraw()
[...stuff...]
if (errorCondition): tkMessageBox.showwarning("My Module","That won't work!")
... но несмотря на то, что работает, кажется, klunky к принести модуль и создать экземпляр объекта, чтобы я мог избавиться от него. Плюс я не хочу путать вещи между этим корнем и «настоящим» корнем в вызывающих приложениях.
Возвращаясь к первому примеру, очевидно, что tkMessageBox
делает что-то под капотом, чтобы создать окно корня самостоятельно. Есть ли способ захватить ссылку на это корневое окно, чтобы я мог withdraw()
?
(Окружающая среда для Windows 7 и Python 2.7.3.)
Спасибо за ответ и особенно ссылки. Несмотря на то, что я не могу удалить это автоматически созданное корневое окно, я все равно могу получить результат, который я хочу, потому что он не будет создавать это корневое окно в первую очередь, если я уже создал его в своем собственном вызывающем приложении. (Который я буду, во всех случаях, когда я использую этот модуль.) – JDM
@JDM Доступ к автогенерируемому корневому окну можно получить, создав виджеты без аргумента 'master', а затем вывести его родительский элемент, например' Tkinter.Button() .master.withdraw() '.Тем не менее, это уродливый walkaround, и ваше решение более явное. –