Шаг 77.
Библиотека PyQt5.
Обработка сигналов и событий. Искусственные события

    На этом шаге мы рассмотрим методы, используемые для создания таких событий.

    Для создания искусственных событий применяются следующие статические методы из класса QCoreApplication:

    В параметре <QObject> указывается ссылка на объект, которому посылается событие, а в параметре <QEvent> - объект события. Последний может быть экземпляром как стандартного (например, QMouseEvent), так и пользовательского класса, являющегося наследником класса QEvent. Пример отправки события QEvent.MouseButtonPress компоненту label:

е = QtGui.QMouseEvent (QtCore.QEvent.MouseButtonPress,
                       QtCore.QPointF(5, 5), QtCore.Qt.LeftButton, 
                       QtCore.Qt.LeftButton, QtCore.Qt.NoModifier)
QtCore.QCoreApplication.sendEvent(self.label, e)

    Для отправки пользовательского события необходимо создать класс, наследующий QEvent. В этом классе следует зарегистрировать пользовательское событие с помощью статического метода registerEventType() и сохранить идентификатор события в атрибуте класса. Пример:

class MyEvent (QtCore.QEvent):
    idType = QtCore.QEvent.registerEventType()
    def __init__(self, data):
        QtCore.QEvent.__init__(self, MyEvent.idType)
        self.data = data 
    def get_data(self):
        return self.data

    Пример отправки события класса MyEvent компоненту label:

QtCore.QCoreApplication.sendEvent(self.label, MyEvent("512"))

    Обработать пользовательское событие можно с помощью методов event(self, <event>) или customEvent(self, <event>). Пример:

def customEvent (self, e):
    if e.type() == MyEvent.idType:
        self.setText ("Получены данные: {0}".format(e.get_data()))

    Со следующего шага мы начнем рассматривать размещение компонентов в окнах.




Предыдущий шаг Содержание Следующий шаг