Python PyQt4发送和接收自定义信号

时间:2014-03-27 12:38:35

标签: python python-2.7 signals pyqt4 signals-slots

我知道有关此主题的几个问题。我已经查看了大部分内容,但仍然无法弄清楚我遇到这个问题的原因。

基本上,我要做的是:使用range (0,0)课程显示忙碌指示进度条(即QThread)。

我正在使用mysignal = QtCore.pyqtSignal()创建我的信号。之后我使用mysignal.emit()传输该信号。该信号用于通知主线程停止进度条动作。

这是我将该信号连接到我的一个函数mysignal.connect(myfunction)的方法。但每当我运行我的脚本时,我都会收到此错误消息。

AttributeError: 'PyQt4.QtCore.pyqtSignal' object has no attribute 'connect'

我的问题可能是什么原因?

仅供参考:我使用的是带有python 2.7.5的Windows 8.1

编辑:

简化我的代码版本:

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()

1 个答案:

答案 0 :(得分:2)

这有点像你将信号添加到类实例而不是类,这是不可能的。几个小时前我自己试了一下,得到了同样的错误信息......

确保在班级上定义信号:

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()