pyQt和线程应用程序崩溃

卡梅尔

我编写了一个简单的程序,该程序具有pyQt界面和2个按钮(开始和取消)。“开始”按钮在后台运行一些计算(通过启动更新功能),并且由于有了线程,我仍然可以使用UI。但是应用程序在10秒-2分钟后崩溃。UI消失了,程序关闭了。

当我使用pythonw运行应用程序而没有控制台线程崩溃后〜25秒后,但gui仍然有效。

#!/usr/bin/python
import threading
import sys
from PyQt4 import QtGui, QtCore
import time
import os


class Class(QtGui.QWidget):

    def __init__(self):
        #Some init variables
        self.initUI()

    def initUI(self):
        #some UI
        self.show()

    def update(self,stop_event):
            while True and not stop_event.isSet():
                self.updateSpeed()
                self.updateDistance()
                self.printLogs()
                self.saveCSV()
                self.guiUpdate()
                time.sleep(1)

    #gui button function
    def initiate(self):
        self.stop_event = threading.Event()
        self.c_thread = threading.Thread(target = self.update, args=(self.stop_event,))
        self.c_thread.start()

    #Also gui button function
    def cancelTracking(self):
        self.stop_event.set()
        self.close()

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Class()
    sys.exit(app.exec_())
    ex.update()

if __name__ == '__main__':
    main()

我不知道我是否在正确执行线程。我在堆栈上找到了这样的例子。我是python的新手,并且是第一次使用线程。

Justengel

这很可能是由于在您单独的线程中调用了GUI函数。PyQt的GUI呼吁像setText()QLineEdit不是从一个线程允许的。在主线程之外进行PyQt绘画的所有内容均不起作用。解决此问题的一种方法是让线程在数据准备就绪时发出信号以更新GUI。另一种方法是让计时器定期检查新数据并paintEvent在一定时间后更新该数据

#!/usr/bin/python
import threading
import sys
from PyQt4 import QtGui, QtCore
import time
import os


class Class(QtGui.QWidget):

    display_update = QtCore.pyqtSignal() # ADDED

    def __init__(self):
        #Some init variables
        self.initUI()

    def initUI(self):
        #some UI
        self.display_update.connect(self.guiUpdate) # ADDED
        self.show()

    def update(self):
        while True and not self.stop_event.isSet():
            self.updateSpeed()
            self.updateDistance()
            self.printLogs()
            self.saveCSV()

            # self.guiUpdate()
            self.display_update.emit() # ADDED

            time.sleep(1)

    #gui button function
    def initiate(self):
        self.stop_event = threading.Event()
        self.c_thread = threading.Thread(target = self.update)
        self.c_thread.start()

    #Also gui button function
    def cancelTracking(self):
        self.stop_event.set()
        self.close()

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Class()
    sys.exit(app.exec_())
    # ex.update() # - this does nothing

if __name__ == '__main__':
    main()

可能发生的另一件事是两个试图访问同一变量的线程死锁。我读过,这在python中是不可能的,但是我从PySide和其他Python C扩展库的组合中体会到了这一点。

可能还希望在关闭时加入线程,或者QtGui.QApplication.aboutToQuit在程序关闭之前使用信号加入线程。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在PyQT应用程序的主线程中使用回调方法在Python中启动新线程

来自分类Dev

Handler.post()线程,正在崩溃的应用程序

来自分类Dev

我的Android应用程序的gameLoop线程在退出时崩溃

来自分类Dev

InflateException和ClassNotFoundException导致应用程序崩溃

来自分类Dev

UIImage下载返回零和崩溃的应用程序(快速)

来自分类Dev

使用Multidex和Google Play服务的应用程序崩溃

来自分类Dev

WKWebView和UINavigationController导致应用程序崩溃

来自分类Dev

我的应用程序未在崩溃的线程中列出

来自分类Dev

超过线程池9和排队的任务128时android应用程序崩溃

来自分类Dev

如何区分应用程序崩溃和用户关闭

来自分类Dev

ANR导致登录和注册使应用程序崩溃

来自分类Dev

运行时PFQuery和PFRelation崩溃应用程序

来自分类Dev

WPF应用程序和线程

来自分类Dev

Handler.post()线程,正在崩溃的应用程序

来自分类Dev

UI线程等待AsyncTask时应用程序崩溃

来自分类Dev

应用程序可立即打开和关闭,而不会崩溃

来自分类Dev

尝试发送邮件和应用程序崩溃

来自分类Dev

UIImage下载返回零和崩溃的应用程序(快速)

来自分类Dev

在线程中运行的JsonReader使应用程序崩溃

来自分类Dev

android和应用程序中的空指针异常崩溃

来自分类Dev

grsec导致应用程序转储和内核崩溃

来自分类Dev

XML Parser阻止主线程和dispatch_async崩溃的应用程序

来自分类Dev

在单独的线程中运行pyQT GUI主应用程序

来自分类Dev

Android应用程序因Twitter数字和翻新而崩溃

来自分类Dev

运行线程使应用程序在android中崩溃

来自分类Dev

当 popoverPresentationController 和键盘关闭时应用程序崩溃

来自分类Dev

带有 ConstraintLayout 的 ListView 和 ArrayAdapter 使应用程序崩溃

来自分类Dev

Firebase 文本和图片上传使应用程序崩溃

来自分类Dev

组合 ListView 和 Fragment 时应用程序崩溃

Related 相关文章

  1. 1

    在PyQT应用程序的主线程中使用回调方法在Python中启动新线程

  2. 2

    Handler.post()线程,正在崩溃的应用程序

  3. 3

    我的Android应用程序的gameLoop线程在退出时崩溃

  4. 4

    InflateException和ClassNotFoundException导致应用程序崩溃

  5. 5

    UIImage下载返回零和崩溃的应用程序(快速)

  6. 6

    使用Multidex和Google Play服务的应用程序崩溃

  7. 7

    WKWebView和UINavigationController导致应用程序崩溃

  8. 8

    我的应用程序未在崩溃的线程中列出

  9. 9

    超过线程池9和排队的任务128时android应用程序崩溃

  10. 10

    如何区分应用程序崩溃和用户关闭

  11. 11

    ANR导致登录和注册使应用程序崩溃

  12. 12

    运行时PFQuery和PFRelation崩溃应用程序

  13. 13

    WPF应用程序和线程

  14. 14

    Handler.post()线程,正在崩溃的应用程序

  15. 15

    UI线程等待AsyncTask时应用程序崩溃

  16. 16

    应用程序可立即打开和关闭,而不会崩溃

  17. 17

    尝试发送邮件和应用程序崩溃

  18. 18

    UIImage下载返回零和崩溃的应用程序(快速)

  19. 19

    在线程中运行的JsonReader使应用程序崩溃

  20. 20

    android和应用程序中的空指针异常崩溃

  21. 21

    grsec导致应用程序转储和内核崩溃

  22. 22

    XML Parser阻止主线程和dispatch_async崩溃的应用程序

  23. 23

    在单独的线程中运行pyQT GUI主应用程序

  24. 24

    Android应用程序因Twitter数字和翻新而崩溃

  25. 25

    运行线程使应用程序在android中崩溃

  26. 26

    当 popoverPresentationController 和键盘关闭时应用程序崩溃

  27. 27

    带有 ConstraintLayout 的 ListView 和 ArrayAdapter 使应用程序崩溃

  28. 28

    Firebase 文本和图片上传使应用程序崩溃

  29. 29

    组合 ListView 和 Fragment 时应用程序崩溃

热门标签

归档