Domanda

Ho visto esempi come questo:

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

Ed esempi come questo:

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

Sto appena iniziando a imparare Qt;su quale dovrei concentrarmi?

È stato utile?

Soluzione

Penso che il secondo esempio sia supportato solo da alcune versioni di Qt (quelle più recenti), mentre il primo sia supportato da quelle più vecchie.Ma entrambi hanno ragione.

Altri suggerimenti

Per quanto ne so, lo stile più recente non funziona se ci sono segnali sovraccarichi, quindi

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

non può essere utilizzato se c'è anche, diciamo, a

clicked(float, float)

quindi dovresti ricorrere allo stile vecchio.È sempre bello conoscerli entrambi.

So che questo post è piuttosto vecchio, ma mi sono appena imbattuto, forse lo farai anche tu e ora questo salva la tua giornata;) OK ...a proposito, è il mio primo post qui su SO, sì!

ATTENZIONE, non ho testato questo codice, ho solo copiato alcuni frammenti di codice che ho scritto qualche tempo fa, quindi potrebbe esserci qualche errore, ma spero che sia comunque d'aiuto

Il nuovo stile di PyQt segnala brevemente:

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

altrimenti prova questohttp://www.harshj.com/2010/05/06/pyqt-faq-custom-signals-jpeg-mouse-hovers-and-more/#custom

Modificare:eventi e segnali non sono la stessa cosa, quello che vedi sopra riguarda i segnali

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top