当新的Tkinter窗口打开时,如何关闭Tkinter窗口?

时间:2020-03-04 21:47:25

标签: python tkinter

我想知道如何使用python打开tkinter窗口,然后在脚本中稍后将其关闭以打开另一个tkinter窗口。我计划在Windows中放入图像,以便在脚本需要时也进行更新。我正在制作一个基于文本的游戏,您可以在其中选择要走的方向,并使用tkinter窗口显示地图。如果有更好的方法可以做到,那将不胜感激,但是我很高兴在调用新窗口时关闭并打开tkinter窗口。

1 个答案:

答案 0 :(得分:0)

创建一个空窗口并运行mainloop()(事件循环)以使其保持打开状态

import tkinter as tk

window = tk.Tk()
window.mainloop()

要关闭它,可以使用标题栏上的标准按钮[x]。

或者您需要在运行window.destroy()的窗口中放置按钮以将其关闭。

import tkinter as tk

window = tk.Tk()

button = tk.Button(window, text='CLOSE', command=window.destroy)
button.pack()

window.mainloop()

BTW:在command=中,它必须是window.destroy,而没有()。它是"callback"-按下按钮时将执行的功能的名称。


在此示例中,按钮运行关闭第一个窗口并创建第二个窗口的功能。

import tkinter as tk

# --- functions ---

def second_window():
    window.destroy()

    second = tk.Tk()

    button = tk.Button(second, text='CLOSE SECOND', command=second.destroy)
    button.pack()

    second.mainloop()

# --- main ---

window = tk.Tk()

button = tk.Button(window, text='CLOSE FIRST', command=second_window)
button.pack()

window.mainloop()

仅当您使用tk.Button()时,先前版本才会打开第二个窗口,但是在按[x]时不会打开第二个窗口。您需要

window.protocol("WM_DELETE_WINDOW", second_window)

在按second_window时运行[x]

import tkinter as tk

# --- functions ---

def second_window():
    window.destroy()

    second = tk.Tk()

    button = tk.Button(second, text='CLOSE SECOND', command=second.destroy)
    button.pack()

    second.mainloop()

# --- main ---

window = tk.Tk()

button = tk.Button(window, text='CLOSE FIRST', command=second_window)
button.pack()

window.protocol("WM_DELETE_WINDOW", second_window)

window.mainloop()

您甚至可以运行关闭并再次创建同一窗口的代码

import tkinter as tk

# --- functions ---

def first_window():
    global window

    if window:
        window.destroy()
        #window = None 

    window = tk.Tk()

    button = tk.Button(window, text='CLOSE FIRST', command=first_window)
    button.pack()

    window.protocol("WM_DELETE_WINDOW", first_window)

    window.mainloop()

# --- main ---

window = None
first_window()

在此示例中,我使用window = None检查窗口是否存在并关闭它。创建新窗口时,可以使用此方法关闭第一个窗口。


在此示例中,我使用first_window = Nonesecond_window = None,以便可以检查是否打开了其他窗口并将其关闭。

import tkinter as tk

# --- functions ---

def open_second_window():
    global first_window
    global second_window

    if first_window:
        first_window.destroy()
        first_window = None

    second_window = tk.Tk()

    button = tk.Button(second_window, text='OPEN FIRST', command=open_first_window)
    button.pack()

    second_window.protocol("WM_DELETE_WINDOW", open_first_window)

    second_window.mainloop()

def open_first_window():
    global first_window
    global second_window

    if second_window:
        second_window.destroy()
        second_window = None

    first_window = tk.Tk()

    button = tk.Button(first_window, text='OPEN SECOND', command=open_second_window)
    button.pack()

    first_window.protocol("WM_DELETE_WINDOW", open_second_window)

    first_window.mainloop()

# --- main ---

first_window = None
second_window = None
open_first_window()

但是我不知道为什么您要关闭一个窗口然后再打开另一个窗口。如果以后要返回第一个窗口,则可以隐藏第一个窗口。或者,您可以将小部件保留在Frame()中,然后删除/删除该框架以显示其他框架。