在PyQt 4中处理事件的正确方法是什么?

问题描述:

我见过的例子是这样的:在PyQt 4中处理事件的正确方法是什么?

self.connect(self.ui.add_button, QtCore.SIGNAL('clicked()'),self.printer) 

和例子是这样的:

self.ui.add_button.clicked.connect(self.printer) 

我刚开始学习Qt;我应该关注哪一点?

我认为第二个例子只支持一些Qt版本(较新的版本),而第一个版本支持较早的版本。 但是,两者都是正确的。

+1

它是在PyQt 4.5 AFAIK中引入的。 – 2009-12-15 01:58:36

据我所知,如果有超载信号较新的风格是不行的,所以

self.ui.add_button.clicked.connect(self.printer) 
如果有还,说

不能用,一

clicked(float, float) 

所以你必须回归旧的风格。了解两者总是很好的。

我知道这篇文章很老,但我只是偶然发现它, 也许你会太过现在这节省你的一天;)好的... 顺便说一句,这是我的第一篇文章,因此,yey !

警告,我没有测试此代码,我刚才复制的代码中的一些片断,我写前一段时间,因此,可能会有一些错误,但我希望它有助于反正简要

的PyQt的新风格的信号:

# notice that the signal declarations are at class level (not inside some method) 

class MyClass(QObject): # must subclass QObject (or subclass) 

    # declaring signals 
    mySimpleSignal = pyqtSignal() 
    mySignalWithArguments = pyqtSignal(int, list) 
    myOverloadedSignal = ([int, object],[str,object]) 

    def __init__(self, parent=None): 
     super(MyClass,self).__init__(parent=parent) # remember to init the super class 
     [...] 

    # methods 
    [...] 

    # connecting signals 
    def connectSignalsMethod(self): 
     # connecting simple signal 
     self.mySimpleSignal.connect(self.mySlot) 
     # connecting signal with arguments 
     self.mySignalWithArguments.connect(self.mySlotWithArguments) 
     # connecting overloaded signals 
     self.myOverloadedSignal[int, object].connect(self.mySlot1) 
     self.myOverloadedSignal[str, object].connect(self.mySLot2) 

     # same syntax for disconnect() 


    # emitting signals 
    def emitSignalsMethod(self): 
     # emitting simple signal 
     self.mySimpleSignal.emit() 
     # emitting signal with arguments 
     self.mySignalWithArguments.emit(123,['this','is','a','list']) 
     # emitting overloaded signal 
     myOverloadedSignal[str,object].emit('this is a string', myObject) 


    # my slots 
    @pyqtSlot() 
    def mySlot(self): 
     print('hey!') 

    @pyqtSlot(int, list) 
    def mySlotWithArguments(self, someNumber, someList): 
     print('got a number: %d and a list: %s' % (someNumber, someList)) 

    @pyqtSlot(int, object) 
    def mySlot1(self, intArg, objectArg): 
     print('got an int and an object') 

    @pyqtSlot(str, object) 
    def mySlot2(self, str, object): 
     print('got a string and an object') 

    # an overloaded slot 
    @pyqtSignal(int) 
    @pyqtSignal(str) 
    def overloadedSlot(someArgument) 
     print('got something: %s' % someArgument) 

否则,试试这个 http://www.harshj.com/2010/05/06/pyqt-faq-custom-signals-jpeg-mouse-hovers-and-more/#custom

编辑: 事件和信号是不一样的,你在上面看到是什么样的信号