Первое окно Python Tkinter работает, но остальные пустые - PullRequest
1 голос
/ 15 октября 2010

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

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

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

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

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

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

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

1 Ответ

2 голосов
/ 16 октября 2010

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

Вы спрашиваете, каков правильный способ создания нескольких окон;Ответ заключается в том, чтобы вызывать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...