He visto ejemplos como este:

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

Y ejemplos como este:

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

Estoy empezando a aprender Qt; ¿En cuál debería centrarme?

2
Vlad the Impala 15 dic. 2009 a las 03:45

3 respuestas

La mejor respuesta

Creo que el segundo ejemplo solo es compatible con algunas versiones de Qt (las más nuevas), mientras que el primero es compatible con las versiones anteriores. Pero, ambos son correctos.

3
mRt 15 dic. 2009 a las 00:50

Sé que esta publicación es bastante antigua, pero me topé con ella, tal vez tú también lo harás y ahora esto te salva el día;) ok ... por cierto, es mi primera publicación aquí en SO, ¡sí!

ADVERTENCIA, no probé este código, solo copié algunos fragmentos de código que escribí hace algún tiempo, por lo tanto, puede haber algún error, pero espero que ayude de todos modos

El nuevo estilo de PyQt señala 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)

De lo contrario, intente esto http: //www.harshj.com/2010/05/06/pyqt-faq-custom-signals-jpeg-mouse-hovers-and-more/#custom

Editar: los eventos y las señales no son lo mismo, lo que ves arriba es sobre señales

0
Pedru 10 abr. 2012 a las 14:06

AFAIK, el estilo más nuevo no funciona si hay señales sobrecargadas, así que

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

No se puede usar si también hay, por ejemplo, un

clicked(float, float)

Así que tendrías que recurrir al estilo más antiguo. Siempre es bueno saber ambos.

0
taynaron 22 jul. 2011 a las 16:32