使用tkinter GUI进行多线程处理

时间:2019-08-06 05:45:05

标签: python multithreading tkinter

我正在使用tkinter库在桌面应用程序上工作,该库在从用户处获取输入后会执行某些功能,并且用户单击按钮后,该功能确实花费了很多时间,并且面临一些问题,这是我到目前为止已经尝试过的方法。

因此,在我添加线程之前,如果用户执行了该功能但想取消该功能,则因为gui变得模糊并在顶部显示(无响应),因此无法取消该功能。因此,要修复此功能,我使它在线程上运行,我遇到线程的第一个问题是thread.join()使它停止工作的代码崩溃,因此我使用thread._delete(),但现在我可以关闭GUI了,但是函数仍在后台运行,因此我尝试寻找一种解决方案,发现没有任何意义,但实际上可行。因此,当用户单击该按钮时,该按钮将执行一个执行4件事的功能: 1创建线程 2执行此代码:exit() 3开始线程 4删除线程 现在,正如您看到的那样,我什至在不导入sys的情况下调用函数exit(),并且由于某种原因它不会退出,但是当程序启动时,我单击退出按钮,线程停止工作,一切都按照我想要的方式退出。不幸的是,我的应用程序必须是可执行文件,因此使用pyinstaller和pyinstaller给我提供了一个非常不错的可执行程序,但是当我运行它时,出现错误:NameError:未定义出口。我需要从sys import出口执行操作,如果执行该操作,出口将像假定的那样工作,并且程序甚至在执行任何操作之前都将完全退出

def GUI()
     ##some GUI code here
    def function 
          the function that needs to be executed
    def go()
          thread = threading.Thread(target= function)
          thread.daemon = True
          exit()
          thread.start()
          thread._delete()
    Button.configure(command = lambda: go())
GUI()

现在我想要的是使程序正常运行,如果用户希望停止该程序,则可以停止该程序而不在后台运行。到目前为止,我所遇到的只是崩溃或线程仍在后台运行

0 个答案:

没有答案