Как сделать произвольное количество окон, используя Python и Tkinter? - PullRequest
1 голос
/ 15 апреля 2011

Я пишу приложение, у которого нет главного окна (оно запускается внутри интерпретатора 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()

Кажется, это работает, потому что окна действительно появляются, но их содержимое упаковано странным способом, который трудно описать. Он чередуется между отсутствием содержимого и сжиманием всего по горизонтали и расширением по вертикали.

1 Ответ

0 голосов
/ 15 апреля 2011

Одна из проблем заключается в том, что вы забыли запустить цикл обработки событий. Или, основываясь на дальнейших изменениях вашего вопроса, вы можете запустить более одного основного цикла. Вам нужен ровно один основной цикл, запускаемый из корневого окна.

Tkinter, безусловно, допускает произвольное количество окон верхнего уровня, но в вашем вопросе недостаточно подробностей, чтобы показать, что не так, если только мое первое предположение не верно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...