首页 > 解决方案 > 当新的 Tkinter 窗口打开时,如何关闭 Tkinter 窗口?

问题描述

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

标签: pythontkinter

解决方案


创建空窗口并运行 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()

顺便说一句: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()并删除/此框架以显示其他框架。


推荐阅读