Python:“PyQt5.QtCore.pyqtSignal”对象没有属性“连接”
Posted
技术标签:
【中文标题】Python:“PyQt5.QtCore.pyqtSignal”对象没有属性“连接”【英文标题】:Python: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'connect' 【发布时间】:2018-06-14 14:32:03 【问题描述】:我遇到了一个 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_AE
的实例。
【参考方案1】:
您有以下错误:
您必须创建一个 Calculs 对象:self.calculs = Calculs()
将信号连接到函数时,必须传递函数的名称,而不是评估函数。
不正确
[...].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()
【讨论】:
@Clement 提示比代码更重要,因为如果您遵循它们,您将不会再遇到相同类型的问题。 明白了!认为没有必要声明 Calcul 对象,因为我只在一个函数中调用它。我可能需要再次阅读文档;)【参考方案2】:也许您需要从QtCore
类继承?
from PySide import QtCore
class CALCULS_AE(QtCore.QThread):
#Signals
Uni_finished = QtCore.pyqtSignal()
Reb_finished = QtCore.pyqtSignal()
...
【讨论】:
以上是关于Python:“PyQt5.QtCore.pyqtSignal”对象没有属性“连接”的主要内容,如果未能解决你的问题,请参考以下文章