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