我在通过线程的pyqtSignal遇到问题。我收到以下错误:
AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'connect'
在命令上:
CALCULS_AE.Uni_finished.connect(self.getFinishThread())
该程序基本上是使用PyQt Designer设计的主窗口,并通过线程调用一些不同的函数。我想在MainWindow代码中获得某些线程的完成信号(以显示结果等)。以下是解释其体系结构的一小部分代码。
主要代码:
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
#Some code...
self.Button.clicked.connect(self.launch_Calculation_clicked)
def launch_Calculation(self):
AE_Uni_thread = threading.Thread(target = CALCULS_AE.Calcul_AE_Uni, args = (arg1, arg2, arg3, arg4)) # Calculs_AE is a class defined in another file
CALCULS_AE.Uni_finished.connect(self.getFinishThread()) # Another function doing some other stuff with the thread's results
AE_Uni_thread.start()
CALCULS_AE类开始计算:
class CALCULS_AE(object):
#Signals
Uni_finished = QtCore.pyqtSignal()
Reb_finished = QtCore.pyqtSignal()
def __init__(self):
# Some Code
def Calculs_AE_Uni(self, arg1, arg2, arg3, arg4):
# Some Code launching the calculation
self.Uni_finished.emit()
PS:pyqtSignals在文档中指定的类级别上定义。
谢谢 !
您遇到以下错误:
您必须创建一个Calculs对象: self.calculs = Calculs()
如果要使用threading
Python的本机,则没有意义QThread
,因为有2个元素都可以这样做,因此将更QThread
改为QObject
。
将信号连接到功能时,必须传递功能名称,而不是经过评估的功能。
不正确的
[...].finished.connect(self.getFinishThread())
对
[...].finished.connect(self.getFinishThread)
target
需要功能的名称,而不是评估的功能。
如果您不打算修改Calculs
该类的构造函数,则无需实现它。
码:
class Test(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
Ui_MainWindow.__init__(self)
self.setupUi(self)
self.pushButton.clicked.connect(self.Launch_Test)
def Launch_Test(self):
self.calculs = Calculs()
self.calculs.finished.connect(self.getFinishThread)
test_thread = threading.Thread(target = self.calculs.Calcul_Test)
test_thread.start()
def getFinishThread(self):
print('Good ! \n')
#os.system('pause')
class Calculs(QObject):
finished = pyqtSignal()
def Calcul_Test(self):
print('Test calcul\n')
self.finished.emit()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句