【发布时间】:2021-08-12 07:05:20
【问题描述】:
这几天,我一直在研究如何解决这个问题。基本上我有一个控制台应用程序,在某些阶段,我调用 pysimplegui 来创建通知窗口或:
- 需要始终在后台运行的主控制台程序
- 如果捕获即击键,则创建一个警报窗口。在这个阶段,我需要主控制台程序在创建 pysimplegui 窗口时仍然捕获击键。因此,我为什么要使用线程在新线程中打开 pysimplegui 窗口。
我是如何开发我的程序的。
if (threading.active_count() < 2):
wt = threading.Thread(target=createwindow, name="noty", args=(argumnets,),
daemon=True)
wt.setDaemon(True) # just to be safe
wt.start()
wt.join()
创建窗口:
def createalertwindow(Attack):
# I have removed this part of the code where I design the gui window just to make easy to understand
e, v = win.read(timeout=5000)
if (e == "e"):
print("e button clicked")
elif (e == "Ok"):
win.close()
# close first window
win.close()
现在每次我运行上面的代码时,我都会遇到以下异常错误:
异常被忽略:
del at 0x000001EACB37CCA0> 回溯(最近一次通话最后): del 中的文件“C:\Users\Abdul\AppData\Local\Programs\Python\Python39\lib\tkinter_init_.py”,第 350 行 如果 self._tk.getboolean(self._tk.call("info", "exists", self.name)): RuntimeError:主线程不在主循环中 异常被忽略: del at 0x000001EACB37CCA0> 回溯(最近一次通话最后): del 中的文件“C:\Users\Abdul\AppData\Local\Programs\Python\Python39\lib\tkinter_init .py”,第 350 行 如果 self._tk.getboolean(self._tk.call("info", "exists", self._name)): RuntimeError: 主线程不在主循环中
我已经阅读了很多问题,但没有找到可以为我解决问题的问题,即我尝试使用:
plt.switch_backend('agg')
wt = threading.Thread(target=createwindow, name="noty", args=(argumnets,),
daemon=True)
wt.setDaemon(True)
...
值得一提的是,我的主程序是控制台应用程序而不是 gui 应用程序。
我正在使用线程库进行线程处理,但如果我有更好的选择并使用 pysimplegui 创建 gui 窗口,我可以切换。
【问题讨论】:
标签: python multithreading pysimplegui