如何在不同模块之间使用信号

时间:2016-06-22 02:35:17

标签: python qt pyqt

我知道如何在模块或类中使用信号:

 class A (QObject):
    def __init__(self):
        QObject.__init__(self)

    def afunc (self, i):
        self.emit(SIGNAL("doSomePrinting(int)"), i)    

    def bfunc(self, i):
        print "Hello World!", i
        sys.exit()

if __name__=="__main__":
    app=QCoreApplication(sys.argv)
    a=A()
    QObject.connect(a,SIGNAL("doSomePrinting(int)"),a.bfunc)
    a.afunc(10)    
    sys.exit(app.exec_())

但我不知道如何在不同模块之间使用信号,例如: a.py和b.py .I在a.py类中定义和绑定信号,我想发出信号来调用在b.py中的a.py中定义的绑定槽。

我用这种方式:

  

self.logsignal.connect(self.handle)signalMange.signal =   self.logsignal

我使用一个类将实例存储在a.py中,我在b.py中调用它,如下所示:

  

signalMange.signal.emit('开始写项目......')

我的方式怎么样?还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

“a.py”
A类有一个名为my_signal的信号,我们在课堂上定义了一个method_for_signal。

from PyQt4 import QtCore, QtGui

class A(QObject):
    my_signal = QtCore.pyqtSignal(str)

    def __init__():
        super(A, self).__init__()
        self.name = "ABCDEFGHIJKLM"

    def method_for_signal(self):    
        self.my_signal.emit(self.name)

“b.py”

这里A类是在B类中导入的,我们想要信号。

from a import A
class B(QObject):

    def __init__():
        super(B, self).__init__()

    @staticmethod
    def update(name):
        print str(name)

    def signal_connect(self):
        self.obj = A()
        self.obj.my_signal.connect(B.update)

调用时B类的signal_connect方法将使我们的信号提供所需的输出。