PyQt4.QtCore.pyqtSignal对象没有属性“连接”

我在自己制作的课程中遇到了自定义信号问题。

相关代码:

self.parse_triggered = QtCore.pyqtSignal() def parseFile(self): self.emit(self.parse_triggered) 

这两个属于类:RefreshWidget。 在其父类中,我有:

 self.refreshWidget.parse_triggered.connect(self.tabWidget.giveTabsData()) 

当我尝试运行该程序时,出现错误:

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

帮帮我? 提前致谢。

我和你有同样的问题。

尝试移动

 self.parse_triggered = QtCore.pyqtSignal() 

在你的构造函数之外,但在你的类声明中。 所以,而不是看起来像这样:

 class Worker(QtCore.QThread): def __init__(self, parent = None): super(Worker, self).__init__(parent) self.parse_triggered = QtCore.pyqtSignal() 

它应该是这样的:

 class Worker(QtCore.QThread): parse_triggered = QtCore.pyqtSignal() def __init__(self, parent = None): super(Worker, self).__init__(parent) 

这可能不是你要找的东西,但它对我有用。 无论如何,我转回到旧式的信号,因为我还没有find一种新的信号方式有一个未定义的数量或types的参数。

如果在自定义类中未能调用super()QObject.__init__() ,您也会收到错误消息。

一个用于在Python中的Qt类中定义自定义信号的清单:

  • 你的类从QObject派生(直接或间接)
  • 你的类__init__调用super() (或直接调用QObject.__init__() 。)
  • 你的信号被定义为一个类variables,而不是一个实例variables
  • 您的信号的签名(forms参数)与您将连接到信号eg ()(int)(str)((int,), (str,))的任何插槽的签名匹配

我最近开始使用PySide(诺基亚自己的PyQt版本),并看到与自定义的新式信号完全相同的行为(和解决scheme)。 我最关心的解决scheme是使用一个类variables来保存信号会搞砸,当我有该类的多个实例(QThreads在我的情况)。

从我可以看到, QtCore.QObject.__init__(self)在类中findSignalvariables,并为该实例创build该Signal的副本。 我不知道什么QObject.__init__()做,但结果信号做适当的connect()disconnect()emit()方法(还有一个__getitem__()方法),而类Signal或独立SignalvariablesQObject派生类没有这些方法,不能正确使用。

要使用信号/插槽系统,你需要有一个QObjectinheritance类。

这是一个简单的例子:

 from PySide import QtCore class LivingBeing( QtCore.QObject ): bornSignal = QtCore.Signal() # initialise our signal def __init__(self,name): QtCore.QObject.__init__(self) # initialisation required for object inheritance self.bornSignal.connect(self.helloWorld) # connect the born signal to the helloworld function self.name = name # self.alive = False def summonFromClay(self): self.alive = True self.bornSignal.emit() # emit the signal def helloWorld(self): print "Hello World !, my name is %s, this place is so great !" % self.name # now try the little piece of code if __name__ == '__main__': firstHuman = LivingBeing('Adam') firstHuman.summonFromClay() 

我有同样的问题。 我忘了,如果一个类使用Signals,那么它必须从QObjectinheritance。 我正在做一些重新考虑,并没有注意到这一点。

为什么你直接连接信号,而你可以做self.connect(widget, SIGNAL('parse_triggered()'), listener.listening_method)

例如,自我就是forms本身,也可能和听众一样