【发布时间】:2019-04-02 01:51:27
【问题描述】:
我是 pyqt5 的新手,我发现一个我无法解释的问题
首先,当我尝试以自己的方式解决这个问题时,我认为我应该直接使用 QObject 而不是 Qthread,但我只是好奇为什么会发生这种情况
如果我使用Qthread(self),程序可以正常工作,但是如果我使用Qthread(),不要将self传递给Qthread parent,程序会崩溃。 这不奇怪,奇怪的是我使用了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_())
【问题讨论】: