Събития и сигнали в PyQt5, Python 3 за начинаещи и манекени
В тази част от урока за PyQt5 ще изучаваме събитията и сигналите, открити в приложенията.
Всички GUI приложения се управляват от събития. Събитията се повдигат предимно от потребителя на приложението. Те обаче могат да бъдат извикани с други средства, като например интернет връзка, мениджър на прозорци или таймер. Когато извикаме метода exec_(), приложението влиза в основния цикъл. Главният цикъл получава събития и ги изпраща към обекти.
В модела на събитието има трима участници:
- Източник на събитие
- Обект на събитието
- Цел на събитието
Източник на събитие е обект, чието състояние се променя. Задейства събитие. Едно събитие капсулира промяна на състоянието в източника на събитие. Целта на събитието е обектът, който трябва да бъде уведомен. Обектът източник на събитие делегира задачата за обработка на събитието на целта на събитието.
За да работи със събития, PyQt5 има уникален механизъмсигналиислотове. Сигналите и слотовете се използват за комуникация между обекти. Сигналът се задейства при настъпване на конкретно събитие. Слотът може да бъде всяка функция. Слотът се извиква, когато сигналът му се задейства.
Сигнали и слотове
Това е прост пример, демонстриращ сигнали и слотове в PyQt5.
В този пример показваме QtGui.QLCDNumber и QtGui.QSlider. Променяме номера на LCD чрез преместване на плъзгача.
Тук прикрепяме сигнала за промяна на стойността на плъзгача към слота на дисплея на номера на LCD.
Sender– обектът, който изпраща сигнала.Приемник– обектът, който приема сигнала.Слоте метод, който реагира на сигнал.
Замяна на манипулатор на събитие
Събитията в PyQt5 се обработват честочрез предефиниране на манипулатори.
В този пример ние заместваме манипулатора на събитие keyPressEvent().
Ако натиснем клавиша Esc, тогава приложението приключва.
Подател на събитието
Понякога е удобно да знаете коя джаджа е подателят на сигнала. PyQt5 има метод sender() за това.
В нашия пример имаме два бутона. В метода buttonClicked() ние определяме кой от бутоните сме щракнали с помощта на метода sender().
И двата бутона са свързани към един и същ слот.
Ние дефинираме източника на сигнал с помощта на метода sender(). В лентата на състоянието на приложението показваме етикета на натиснатия бутон.
Изпращане на сигнали
Обектите, създадени от QObject, могат да изпращат сигнали. В следващия пример ще видим как можем да изпратим персонализиран сигнал.
Създаваме нов сигнал, наречен closeApp. Този сигнал се изпраща по време на събитие с щракване на мишката. Сигналът е прикачен към close() слота на класа QMainWindow.
Сигналът се създава с помощта на pyqtSignal() като атрибут на външния клас Communicate.
Персонализираният сигнал closeApp е прикрепен към слота close() на класа QMainWindow.
Когато щракнем върху прозореца с курсора на мишката, се изпраща сигналът closeApp. Приложението приключва.
В тази част от урока за PyQt5 разгледахме сигнали и слотове.