На этом шаге мы закончим изучение этого вопроса, в частности, обработаем события получения и потери фокуса.
Обработать получение и потерю фокуса ввода позволяют следующие методы класса QWidget:
Создадим окно с кнопкой и двумя однострочными полями ввода. Для полей ввода обработаем получение и потерю фокуса ввода, а по нажатию кнопки установим фокус ввода на второе поле. Кроме того, зададим последовательность перехода при нажатии клавиши Tab.
# -*- coding: utf-8 -*- from PyQt5 import QtWidgets class MyLineEdit(QtWidgets.QLineEdit): def __init__(self, id, parent = None): QtWidgets.QLineEdit.__init__(self, parent) self.id = id def focusInEvent(self, e): print("Получен фокус полем", self.id) QtWidgets.QLineEdit.focusInEvent(self, e) def focusOutEvent(self, e): print("Потерян фокус полем", self.id) QtWidgets.QLineEdit.focusOutEvent(self, e) class MyWindow(QtWidgets.QWidget): def __init__ (self, parent = None): QtWidgets.QWidget.__init__(self, parent) self.resize(300, 100) self.button = QtWidgets.QPushButton("Установить фокус на поле 2") self.line1 = MyLineEdit (1) self.line2 = MyLineEdit (2) self.vbox = QtWidgets.QVBoxLayout() self.vbox.addWidget(self.button) self.vbox.addWidget(self.line1) self.vbox.addWidget(self.line2) self.setLayout(self.vbox) self.button.clicked.connect(self.on_clicked) # Задаем порядок обхода с помощью клавиши <Tab> QtWidgets.QWidget.setTabOrder(self.line1, self.line2) QtWidgets.QWidget.setTabOrder(self.line2, self.button) def on_clicked(self): self.line2.setFocus() if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())
Результат работы приложения изображен на рисунке 1.
Рис.1. Результат работы приложения
На следующем шаге мы рассмотрим назначение клавиш быстрого доступа.