2016-02-16 4 views
0

Я создал программу в python 3.4 с помощью GUI-модуля tkinter. Я хочу настроить код, поэтому, когда будет вызвано новое окно, он закроет текущее окно и откроет новое окно. На данный момент текущее окно просто находится за новым окном, а не уничтожает его. Я попытался использовать .destroy(), но это предотвращает открытие другого окна. У меня есть моя процедура, которая выполняет текущий переключатель окна ниже.Закрытие текущего окна при открытии другого окна

def help1(self): 
     root2=Toplevel(self.master) 
     HelpWindow= HelpScreen.Help(root2) 

Я понимаю, этот вопрос довольно часто, но я не могу найти soloution на здесь, которая была бы применима для моего кода.

+0

Не близко, отключите его! Зачем ? Что такое тип закрытия окна? 'grab_set/grab_release' или' remove/deiconify', вам нужен метод закрытия дескриптора, потому что 'Ex: if sub_window закрывается системой'. нужно добавить проверку состояния в главном приложении 'if csub_window существует' – dsgdfg

+0

Приложение должно иметь одно главное окно Tk(). Когда это будет уничтожено, игра закончится (как вы обнаружили). Для чего вы хотите, спрячьте главное с увольнением, создайте и уничтожьте Toplevels. Или: создавать и уничтожать фреймы, помещенные в главное окно. Или: поместите несколько кадров поверх друг друга и .lift() тот, который вы хотите видеть. –

+0

Вопросы, подобные этому, были заданы раньше. Вы можете попробовать немного поиграть. –

ответ

1

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

Если вам нужно только одно окно в приложении, создайте корневое окно, а затем скройте его и не используйте. Затем создайте первое реальное окно как Toplevel. С этого момента вы можете легко уничтожить текущее окно и создать новое окно.

Вот надуманный пример:

import tkinter as tk 

root = tk.Tk() 
root.withdraw() 

current_window = None 

def replace_window(root): 
    """Destroy current window, create new window""" 
    global current_window 
    if current_window is not None: 
     current_window.destroy() 
    current_window = tk.Toplevel(root) 

    # if the user kills the window via the window manager, 
    # exit the application. 
    current_window.wm_protocol("WM_DELETE_WINDOW", root.destroy) 

    return current_window 

counter = 0 
def new_window(): 
    global counter 
    counter += 1 

    window = replace_window(root) 
    label = tk.Label(window, text="This is window %s" % counter) 
    button = tk.Button(window, text="Create a new window", command=new_window) 
    label.pack(fill="both", expand=True, padx=20, pady=20) 
    button.pack(padx=10, pady=10) 

window = new_window() 
Смежные вопросы