我正在尝试使用PyQt开发软件,但经常遇到软件崩溃且没有调试信息(只有退出代码0xC0000409)。我正在使用QThread,并编写了以下系统:
class serialThreadC(QThread):
updateOutBox = QtCore.pyqtSignal(str)
updateStatus = QtCore.pyqtSignal(int)
def __init__(self):
super(serialThreadC, self).__init__()
self.ser = False
self.state = 0
self.serialEnabled = False
def run(self):
while True:
if self.state == -3 or self.state == -2:
if self.SerialEnabled:
self.updatePB(20)
elif self.state == 0:
if self.serialEnabled:
self.updatePB(20)
def ConnDisconn(self):
self.serialEnabled = not self.serialEnabled
def updatePB(self, stat):
self.state = stat
self.updateStatus.emit(self.state)
serialThread = serialThreadC()
serialThread.start()
## sw is a QDialog already loaded
serialThread.updateOutBox.connect(sw.updateOutBox)
serialThread.updateStatus.connect(sw.updateStatus)
sw.PB_ConnDisconn.clicked.connect(serialThread.ConnDisconn)
我在
run()
或ConnDisconn()
中读写serialEnabled
时会崩溃。我知道PyQt不是线程安全的,变量处理错误会导致我的类型崩溃,但我无法理解我的代码有什么问题。我的想法(也许是错的)是所有serialThread
方法都在同一个线程上执行,即使它们连接到gui(主线程)。这是错误的吗?同样地,我从serialThread
发出事件,并将它们连接到GUI,但这从未给我带来问题。
您能看到我犯的错误吗?如果有崩溃而没有其他信息,有没有调试代码的方法?(我使用PyCharm 2017.1.3)。