Pergunta

Eu vi exemplos como este:

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

E exemplos como este:

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

Eu estou apenas começando a aprender Qt; qual devo focar?

Foi útil?

Solução

Eu acho que o segundo exemplo é suportado apenas por algumas versões do Qt (os mais recentes), enquanto o primeiro-lo apoiado por mais velhos. Mas, ambos estão corretos.

Outras dicas

AFAIK, o novo estilo não funciona se não houver sinais de sobrecarga, então

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

não pode ser usado se houver também, digamos, um

clicked(float, float)

então você teria que cair de volta para o estilo mais antigo. É sempre bom saber ambos.

Eu sei que este post é muito velho, mas eu só tropeçou em toda ela, talvez você também e agora isso poupa o seu dia;) ok ... por sinal, é o meu primeiro post aqui no SO, yey!

AVISO, eu não testei este código, eu apenas copiei alguns trechos de código que eu escrevi há algum tempo, por isso, pode haver algum erro, mas espero que ajude de qualquer maneira

novo PyQt sinais estilo 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)

Caso contrário, tente este http: //www.harshj.com/2010/05/06/pyqt-faq-custom-signals-jpeg-mouse-hovers-and-more/#custom

Edit: eventos e sinais não são os mesmos, o que você vê acima é sobre sinais

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top