[英]Stop tkinter GUI with a button
我正在使用 tkinter 创建一个 GUI,我需要帮助。 我有两个按钮,一个用于启动我的代码,另一个用于退出 GUI 并停止代码运行。 这是我的代码的一部分:
def close_app():
window.destroy()
def run_app():
.... do something...
window = tk.Tk() #start of the app
button_run = tk.Button(frame_bottom, text = "Search", command = run_app)
button_run.grid(column=0, row=0, sticky='w', padx=100, pady=2)
button_close = tk.Button(frame_bottom, text = "Exit", command = close_app)
button_close.grid(column=1, row=0, sticky='e', padx=100, pady=2)
window.mainloop() #end of the app
问题是,当我按下“退出”按钮时,GUI 不再响应,代码仍在后台继续运行。 如何使用退出按钮停止程序的执行? 我还尝试删除退出按钮并停止代码,只需关闭 GUI,但问题是一样的,过了一会儿“不响应”出现。 我该如何解决?
将frame_bottom
替换为window
从您发布的代码中很难判断,但如果run_app
正在做一些需要很长时间的事情,function 将不会停止 - 这就是您的 GUI 冻结的原因。
如果run_app
包含一个循环,则在close_app
中设置一个全局变量,然后检查循环内部是否设置了该变量以及是否停止循环将是解决方案:
import time
import tkinter as tk
exit_app = False
def close_app():
exit_app = True
window.destroy()
def run_app():
for i in range(100):
if exit_app:
break
time.sleep(1)
window = tk.Tk()
button_run = tk.Button(frame_bottom, text = "Search", command = run_app)
button_run.grid(column=0, row=0, sticky='w', padx=100, pady=2)
button_close = tk.Button(frame_bottom, text = "Exit", command = close_app)
button_close.grid(column=1, row=0, sticky='e', padx=100, pady=2)
window.mainloop()
(未测试,因为您的代码未定义frame_bottom
)
如果它没有在循环中运行,最后的解决方案是在close_app
中调用sys.exit
,它应该立即退出你的脚本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.