首页 > 解决方案 > Tkinter 没有响应并且按钮冻结?

问题描述

我正在使用 tkinter 编写一个应用程序,按下按钮时应用程序连接到 sql DB 并运行 sql 查询。我遇到了一个问题,在 sql 查询方法运行时 GUI 显示“没有响应”,完成后又恢复正常。我决定将 sql 查询放在自己的线程中,将 tkinter 的 mainloop 放在自己的线程中,但它根本不起作用......?

def createGUI():
    window = Tk()
    window.title("Recon Report Generator")

    lbl=Label(window, text="Enter Recon File Below", fg='blue', font=("Helvetica", 16))
    lbl.place(x=90,y=50)
    textBox=Entry(window, text="This is Entry Widget", bd=5)
    textBox.place(x=135, y=100)
    button=Button(window, height=1, width=15, text="Find Missing", 
                    command=lambda: retrieve_input(textBox,lbl))
    button.place(x=140, y=150)
    window.geometry("400x400")
    window.resizable(False, False)
    _thread.start_new_thread(window.mainloop(), (0,))

这是我的 GUI 我将主循环放在线程 0 中

和这里

def retrieve_input(textBox,lbl):
    detFile = "'"+(textBox.get())+"'"
    lbl.place(x=140,y=50)
    lbl.config(text="Enter Recon File Below")
    _thread.start_new_thread(runDatabaseQuerys(detFile), (1,))

    lbl.config(text="Finished...")
    print("Finished Please check file")

我将 sql 查询运行方法放在线程 1 中,它们是独立线程,但我仍然“没有响应”???

标签: pythonpython-3.xtkinter

解决方案


我被这个问题困扰了很长时间,直到我在 stackoverflow 上找到了关于使用多线程的答案。

Tkinter 窗口显示(无响应)但代码正在运行

您为 sql 查询函数创建一个线程,如下所示

from threading import Thread 

Thread(target = retrieve_input, args =(textbox, lbl, )).start()

推荐阅读