[英]pyqt5 qthread crash for unkown reason,how to use it correctly?
我是pyqt5的新手,我發現了一個我無法解釋的問題
首先,我想嘗試以自己的方式解決此問題時,應該直接使用QObject而不是Qthread,但是我很好奇為什么會這樣
如果我使用Qthread(self),並且程序運行正常,但是如果我使用Qthread(),則不要將self傳遞給Qthread父級,則程序將崩潰。 這不是奇怪的,而是我使用Qthread()並添加一行time.sleep(0.1),代碼也可以正常工作,我不知道為什么,有人可以解釋一下。
我經常使用Python,但對pyqt5還是陌生的,它的代碼是C ++,我無法閱讀源代碼來找到原因。 這是我的代碼:
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QGridLayout
from PyQt5.QtCore import QThread
import sys
import time
import threading
class MyThread(QThread):
def run(self):
print('working', threading.current_thread())
class MyHelper(QWidget):
def __init__(self):
super(MyHelper, self).__init__()
self.init_ui()
def init_ui(self):
self.submit_button = QPushButton('submit')
self.submit_button.clicked.connect(self.click_op)
self.my_grid = QGridLayout()
self.my_grid.addWidget(self.submit_button, 1, 1)
self.setLayout(self.my_grid)
self.setGeometry(300, 300, 350, 300)
self.show()
def click_op(self):
'''
my_sender = MyThread() crash
my_sender = MyThread(self) OK
my_sender = MyThread() + time.sleep(0.1) OK, most weild one
'''
my_sender = MyThread()
# my_sender = MyThread(self)
my_sender.start()
time.sleep(0.1)
if __name__ == '__main__':
app = QApplication(sys.argv)
email_helper = MyHelper()
exit(app.exec_())
局部變量在函數末尾自動銷毀,將my_sender
聲明為類變量
self.my_sender = MyThread()
self.my_sender.start()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.