python - 当新的 Tkinter 窗口打开时,如何关闭 Tkinter 窗口?
问题描述
我想知道如何使用 python 打开一个 tkinter 窗口,然后在脚本中关闭它以打开另一个 tkinter 窗口。在 Windows 中,我打算只放入图像,以便在脚本需要时更新它。我正在制作一个基于文本的游戏,您可以在其中选择想要去的方向,并使用 tkinter 窗口来显示地图。如果有任何更好的方法可以做到这一点,那将不胜感激,但我很高兴在调用新窗口时关闭和打开 tkinter 窗口。
解决方案
创建空窗口并运行 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 = None
,second_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()
并删除/此框架以显示其他框架。
推荐阅读
- jquery - 使用 jQuery 将图像适合表格单元格
- c++ - 我们可以在标准容器中使用 std::auto_ptr<> 吗?是的,但使用移动语义
- excel - 字符串值操作
- c# - 覆盖“公共”继承成员时无法更改访问修饰符
- javascript - 绑定滚动事件不会在角度指令中触发
- reactjs - 如何将参数传递给reactjs中的事件句柄
- ansible - 使用 Ansible 获取 VMware 虚拟机的 UUID
- neo4j - 有没有办法一起执行所有 3 个查询?
- c# - 如何通过 Socket C# 发送长字符串
- java - 如何使用 phantomjs 将多个 Web 元素传递到页面