2010-10-15 1 views
1

Я думаю, что мне не хватает чего-то общего о Tkinter.Первое окно Python Tkinter работает, но остальные пустые

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

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

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

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

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

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

ответ

2

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

Вы спрашиваете, какой правильный способ создать несколько окон; ответ на это - назвать 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() 
+0

Да, я в основном писал в отчаянии надеясь, что был какой-то явный общий образец, который я неправильно. Спасибо, хотя – Jeff

 Смежные вопросы

  • Нет связанных вопросов^_^