繁体   English   中英

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

[英]Python PyQt4 Emitting and Receiving Custom signals

我知道有关此主题有几个问题。 我已经浏览了大多数,但仍然无法弄清楚为什么我会遇到这个问题。

基本上,我想做的是:使用QThread类显示繁忙的指示进度栏(即range (0,0) )。

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

这就是我将该信号连接到函数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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM