Я пишу приложение, у которого нет главного окна (оно запускается внутри интерпретатора Python в другом приложении), и я подумал, что у меня есть хорошее решение для взаимодействия Tkinter - я сделал Tkinter.Tk
класс в Борг .
class RootWindow(Tk):
""" Invisible window that serves as the default parent
of all others.
"""
groupDict = {}
def __init__(self):
self.__dict__ = self.groupDict
if self.__dict__ == {}: # first instance
Tk.__init__(self)
self.withdraw()
Тогда у меня есть Window
с, которые подклассы от Tkinter.Toplevel
, по умолчанию до parent=RootWindow()
. В результате я могу создать любое число Window
s, и они будут использовать один и тот же корень.
Когда-то хорошо работает для первого Window
, но после этого все портится. (
см. Фото
Что я делаю не так? Это даже выполнимое решение?
Спасибо
РЕДАКТИРОВАТЬ: Я должен добавить, что, хотя на картинке запущены другие объекты, проблему можно дублировать, просто используя RootWindow
в качестве родителя Tkinter.Toplevel
.
EDIT: я переопределил Window.mainloop
, поэтому все использует цикл событий RootWindow
.
def mainloop(self):
self.master.wait_window(self)
Затем я создаю каждое видимое окно следующим образом:
test = Window()
test.mainloop()
Кажется, это работает, потому что окна действительно появляются, но их содержимое упаковано странным способом, который трудно описать. Он чередуется между отсутствием содержимого и сжиманием всего по горизонтали и расширением по вертикали.