繁体   English   中英

使用按钮停止 tkinter GUI

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM