Первое окно Python Tkinter работает, но остальные пусты

Я думаю, что мне не хватает чего-то основного в Tkinter.

Каким будет правильный способ создать несколько окон с одним и тем же скрытым корневым окном? Я могу открыть одно окно, но после его закрытия последующие отображаются пустыми, без каких-либо виджетов. Я также заметил, что если я оставлю корневое окно видимым, оно исчезнет, ​​когда я закрою первое «настоящее» окно.

Я бы опубликовал код, но я не смог понять, что вызывает такое поведение, а мой фактический код довольно сложен и должен выполняться внутри другой (еще более сложной) программы.

Я пытался использовать .quit() или .destroy() для закрытия окон и помещал циклы mainloop()s и wait_window() в разные места, но все либо по-прежнему имеет ошибку, либо что-то еще хуже. Я думаю, то, что я ищу, это просто другая перспектива.

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

Любые идеи? Я знаю, что это немного расплывчато. Спасибо

РЕШЕНО: Это, вероятно, никому не поможет, но я разобрался с проблемой. У меня есть несколько классов окон, каждый из которых является производным от Tkinter.Toplevel. В моем базовом классе Window я создал функцию close(), которая вызывает self.destroy(). Затем в его подклассах я добавил собственный код для хранения их геометрии и т. д. и, наконец, назвал Window.close(self). Что-то в этом не работает, потому что если я просто использую self.quit() вместо вызова close() суперкласса, все в порядке.


person jefdaj    schedule 15.10.2010    source источник


Ответы (1)


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

Вы спрашиваете, как правильно создать несколько окон; ответом на это является вызов Toplevel() для каждого окна, ни больше, ни меньше. Затем вам решать размещать виджеты внутри этого окна. Нет никакого секрета, никаких скрытых опций, никаких дополнительных команд. Просто убедитесь, что родитель для каждого дочернего виджета установлен правильно.

Вот простой пример:

import Tkinter as tk
import sys

def exit():
    sys.exit(0)

root = tk.Tk()
root.wm_withdraw()
for i in range (10):
    top = tk.Toplevel(root)
    top.title("Window %s" % i)
    label = tk.Label(top, text="This is toplevel #%s" % i)
    button = tk.Button(top, text="exit", command=exit)
    label.pack()
    button.pack()

root.mainloop()
person Bryan Oakley    schedule 16.10.2010
comment
Да, я в основном писал в отчаянии, надеясь, что есть какой-то очевидный общий шаблон, который я неправильно использовал. Все равно спасибо - person jefdaj; 16.10.2010