这是我尝试尝试将QThreads子类化并在程序中使用它的第一次尝试,但是我有点奇怪。我不确定我的构造函数是错误的还是类似的东西,但是基本上,当我运行我的QThread时,整个程序都会在QThread休眠时休眠(而不仅仅是线程)
例如,提供的代码将在3秒钟后打印“ Hello there”(这是QThread应该休眠的时间)
如何修复代码,以便在程序运行时让线程在后台运行
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QThread, pyqtSignal
import time
class MyThread(QThread):
def __init__(self):
QThread.__init__(self)
def __del__(self):
self.wait()
def run(self):
self.sleep(3)
print("Slept for 3 seconds")
def main():
qThread = MyThread()
qThread.run()
print("Hello there")
main()
答案 0 :(得分:2)
使用start
而不是run
:
def main():
qThread = MyThread()
qThread.start()
print("Hello there")
由于run
是线程的starting point(在您想重用非线程代码的情况下存在),
start
是启动线程本身的方法,因此它将依次调用run
答案 1 :(得分:-1)
要完成ptolemy0的答案,我可以与您分享我在Qt上练习使用的代码:
from PyQt5.QtCore import QThread
from PyQt5.QtWidgets import QWidget, QApplication
import sys, time
class MyThread(QThread):
def __init__(self, parent=None):
super(MyThread, self).__init__(parent)
def __del__(self):
self.wait()
def run(self):
while True:
self.sleep(3)
print("Slept for 3 seconds")
class Main(QWidget):
def __init__(self, parent=None):
super(Main,self).__init__(parent)
qThread = MyThread()
qThread.start()
i=0
while True:
print(i)
i+=1
time.sleep(1)
def main():
app = QApplication(sys.argv)
example = Main()
print("Hello there")
sys.exit(app.exec())
main()
希望它可以为您提供帮助!