2009-12-15 8 views

Répondre

3

Je pense que le second exemple n'est supporté que par certaines versions de Qt (les plus récentes), alors que le premier est supporté par les plus anciennes. Mais, les deux sont corrects.

+1

Il a été introduit dans PyQt 4.5 AFAIK. –

0

AFAIK, le nouveau style ne fonctionne pas s'il y a des signaux surchargées, donc

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

ne peut pas être utilisé s'il y a aussi, par exemple, un

clicked(float, float) 

donc vous devriez dois revenir à l'ancien style. C'est toujours bon de savoir les deux.

0

Je sais que ce post est assez vieux, mais je suis tombé sur elle, peut-être vous aussi et maintenant ce sauve la journée;) ok ... en passant, il est mon premier post ici sur le SO, Yey !

ATTENTION, je n'ai pas testé ce code, je viens de copier quelques extraits de code je l'ai écrit il y a quelque temps, donc, il peut y avoir une erreur, mais j'espère que cela aide quand même

nouveaux signaux de style de PyQt brièvement:

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

sinon, essayez cette http://www.harshj.com/2010/05/06/pyqt-faq-custom-signals-jpeg-mouse-hovers-and-more/#custom

Edit: événements et signaux ne sont pas les mêmes, ce que vous voyez ci-dessus est sur les signaux