当前位置: 首页 > 知识库问答 >
问题:

Tkinter没有响应和按钮冻结?

裴姚石
2023-03-14

我正在使用tkinter编写一个应用程序,当按下按钮时,该应用程序将连接到sql DB并运行sql查询。我遇到了这样一个问题:当sql querys方法运行时,GUI会说“没有响应”,当它完成时,它会恢复正常。我决定将sql查询放在它自己的线程中,将tkinter的主循环放在它自己的线程中,但它根本不工作。。。?

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中,它们是独立线程,但我仍然得到“无响应”???

共有1个答案

庞阳波
2023-03-14

我很长一段时间都在讨论这个问题,直到我在stackoverflow上找到了关于使用多线程的答案。

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

创建一个SQL查询函数的线程,如下所示

from threading import Thread 

Thread(target = retrieve_input, args =(textbox, lbl, )).start()
 类似资料:
  • 我试图建立一个简单的自动点击程序,它有开始/停止按钮和热键(使用Tkinter和Pynput)。每当我用“开始”按钮启动自动点击器时,它都能正常工作,我也能停止它。但是,当我用热键启动自动点击器时,我不能用停止按钮停止它,因为它会冻结整个程序。 这是我的GUI主类: 这些是我的Clicker和键盘课程: 有人知道为什么在使用热键后按下停止按钮时会冻结吗?

  • 当我单击submit或register时,需要两次单击才能完成任何操作。如何修复此问题?

  • 问题内容: 我想制定一个具有以下目标的程序: 1)创建一个JButton 2)使用键绑定将按钮附加到一个键(“ A”键)3)单击“ A”时执行一些代码 这是我到目前为止的代码: 现在,在哪里添加我希望在按下按钮时执行的代码? 问题答案: 您需要添加一个动作监听器,专门用于actionPerformed。在构造函数内的某处声明此内容: 在此示例中,如果我们按F2,则等效于按下按钮。

  • 我在我的活动中有一个按钮,我希望它有我的主题的重音颜色。而不是像我们必须做前Lollipop一样制作我自己的绘图,自然我想使用新的背景色调属性。 不幸的是,它没有效果,按钮保持灰色。 我尝试了的不同值,但没有改变任何东西。 我还尝试在我的活动中以编程方式进行,但没有改变任何东西。 为什么我的色彩被忽略了? 编辑:只是澄清一下,我确实在测试Lollipop设备。其他小部件(如EditText)正确自

  • Button 控件是 Tkinter 中常用的窗口部件之一,同时也是实现程序与用户交互的主要控件。通过用户点击按钮的行为来执行回调函数,是 Button 控件的主要功用。首先自定义一个函数或者方法,然后将函数与按钮关联起来,最后,当用户按下这个按钮时,Tkinter 就会自动调用相关函数。 按钮控件使用起来非常简单,它同样可以包含文本、图像、位图,并通过 参数回调函数。当然按钮也并非一定要执行回调