Каков правильный метод обработки событий в PyQt 4?

StackOverflow https://stackoverflow.com/questions/1904567

  •  19-09-2019
  •  | 
  •  

Вопрос

Я видел подобные примеры:

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

И примеры, подобные этому:

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

Я только начинаю изучать Qt;на каком из них мне следует сосредоточиться?

Это было полезно?

Решение

Я думаю, что второй пример поддерживается только некоторыми версиями Qt (более новыми), в то время как первый поддерживается более старыми.Но и то, и другое верно.

Другие советы

AFAIK, новый стиль не работает при наличии перегруженных сигналов, так что

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

не может быть использован, если есть также, скажем,

clicked(float, float)

так что вам придется вернуться к старому стилю.Всегда полезно знать и то, и другое.

Я знаю, что этот пост довольно старый, но я только что наткнулся на него, может быть, вы тоже наткнетесь, и теперь это спасет вам положение ;) хорошо...кстати, это мой первый пост здесь, на SO, 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

Редактировать:события и сигналы - это не одно и то же, то, что вы видите выше, касается сигналов

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top