最新写了一个pyqt5的脚本, 用到了多线程, 在关闭页面的时候, 总是会报错this application has requested the runtime
, 网上找了很久没发现问题所在, 最后一点一点试出来错误在哪, 特此记录.
关键在于我使用了多线程, 子线程关闭基本由两种方式
- 设置
setDaemon(True
为守护线程, 那么主线程关闭则子线程自然关闭 - 子线程主动
sys.exit(0)
退出线程(和在run中结束一样的效果)
我是因为想要让ui更加顺滑一点, 所以在子线程中跑了pyqt,并且设置为守护线程, 然后在关闭ui界面的时候, 直接通知主线程结束, 而子线程不做任何处理连关闭事件也不accept()
这个时候执行, 然后点击关闭按钮的时候, 就会报这个错误.
解决方法是:
- 不要使用守护线程
- 关闭按钮触发的时候, 直接通知主线程结束, ui线程本身也接受关闭事件(或者直接sys.exit(0) 一样的, 就是主动结束子线程即可)