我知道关于这个主题有几个问题。我已经浏览了其中的大部分内容,但仍然无法弄清楚为什么我会遇到这个问题。
基本上,我想做的是:使用 range (0,0)
显示繁忙指示进度条(即 QThread
)类。
我正在使用mysignal = QtCore.pyqtSignal()
创建我的信号。之后我使用 mysignal.emit()
来传输该信号。该信号用于通知主线程停止进度条 Action 。
这就是我将该信号连接到我的函数之一 mysignal.connect(myfunction)
的方式。但每当我运行我的脚本时,我都会收到此错误消息。
AttributeError: 'PyQt4.QtCore.pyqtSignal' object has no attribute 'connect'
导致我的问题的可能原因是什么?
仅供引用:我正在使用 Windows 8.1 和 python 2.7.5
编辑:
下面我的代码的简化版本:
class Main(QtGui.QMainWindow):
.......
.......
self.progressBar = QtGui.QProgressBar(self)
self.progressBar.setRange(0,1)
button = QtGui.QPushButton('button')
button.clicked.connect(self.onStart())
def onStart(self):
self.progressBar.setRange(0,0)
self.LoadPage = LoadingThread()
self.LoadPage.taskFinished.connect(self.onFinished)
self.LoadPage.Load()
def onFinished(self):
self.progressBar.setRange(0,1)
class LoadingThread(QtCore.QThread):
def __init__(self):
QtCore.QThread.__init__(self)
self.taskFinished = QtCore.pyqtSignal()
def Load(self):
#My stuffs here (to be executed duing the progress bar busy)
time.sleep(5)
self.taskFinished.emit()
最佳答案
这听起来像是您将信号添加到类实例而不是类中,这是不可能的。几个小时前我自己尝试过,收到相同的错误消息......
确保信号在类上定义:
class Foo(QObject):
mysignal = QtCore.pyqtSignal()
这不起作用:
foo = Foo()
foo.mysignal = QtCore.pyqtSignal()
编辑:
根据您的情况,将 LoadingThread 更改为:
class LoadingThread(QtCore.QThread):
taskFinished = QtCore.pyqtSignal()
def __init__(self):
QtCore.QThread.__init__(self)
def Load(self):
#My stuffs here (to be executed duing the progress bar busy)
time.sleep(5)
self.taskFinished.emit()
关于Python PyQt4 发送和接收自定义信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22687915/