Этот урок посвящен созданию простейшего графического интерфейса пользователя (GUI) в Python с использованием библиотеки PyQt5. Мы научимся создавать надписи и кнопки, размещать их на окне и обрабатывать события нажатия кнопок. Код будет написан исключительно с использованием PyQt5, без использования Qt Designer.
Импорт необходимых классов
Для начала импортируем необходимые классы из библиотеки PyQt5:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QLabel, QPushButton
- QApplication: Создает приложение.
- QMainWindow: Создает главное окно приложения.
- QWidget: Базовый класс для всех виджетов (GUI-элементов).
- QLabel: Создает текстовую надпись.
- QPushButton: Создает кнопку.
Создание основного приложения и окна
Создадим функцию, которая будет вызываться при запуске приложения. В этой функции создадим объект приложения и главное окно:
def application():
app = QApplication(sys.argv)
window = QMainWindow()
window.setWindowTitle('Простая программа')
window.setGeometry(300, 250, 350, 200) # Смещение (x, y), ширина, высота
window.show()
sys.exit(app.exec_())
- app = QApplication(sys.argv): Создает объект приложения, передавая ему аргументы командной строки.
- window = QMainWindow(): Создает объект главного окна.
- window.setWindowTitle(‘Простая программа’): Устанавливает заголовок окна.
- window.setGeometry(300, 250, 350, 200): Устанавливает геометрические параметры окна: позиция (300, 250) и размеры (350×200 пикселей).
- window.show(): Отображает окно.
- sys.exit(app.exec_()): Запускает цикл обработки событий приложения и завершает его корректно.
Добавление надписи и кнопки
Добавим в окно текстовую надпись и кнопку:
main_text = QLabel(window)
main_text.setText('Базовая надпись')
main_text.move(100, 100)
main_text.setFixedWidth(main_text.sizeHint().width()) # Подгоняем ширину под текст
button = QPushButton(window)
button.setText('Нажми на меня')
button.move(70, 150)
button.setFixedWidth(200)
- main_text = QLabel(window): Создает объект QLabel, дочерний элемент окна window.
- main_text.setText(‘Базовая надпись’): Устанавливает текст надписи.
- main_text.move(100, 100): Перемещает надпись на позицию (100, 100) относительно верхнего левого угла окна.
- main_text.setFixedWidth(…): Устанавливает фиксированную ширину надписи.
- Кнопка button создается и настраивается аналогично.
Обработка события нажатия кнопки
Для обработки события нажатия кнопки создадим метод on_button_clicked:
def on_button_clicked():
print('Кнопка нажата!')
button.clicked.connect(on_button_clicked)
- def on_button_clicked():: Функция, вызываемая при нажатии кнопки. Выводит сообщение в консоль.
- button.clicked.connect(on_button_clicked): Подключает функцию on_button_clicked к событию нажатия кнопки.
Использование класса для организации кода
Для улучшения организации кода, перепишем программу, используя класс:
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('Простая программа')
self.setGeometry(300, 250, 350, 200)
self.main_text = QLabel(self)
self.main_text.setText('Базовая надпись')
self.main_text.move(100, 100)
self.main_text.setFixedWidth(self.main_text.sizeHint().width())
self.button = QPushButton(self)
self.button.setText('Нажми на меня')
self.button.move(70, 150)
self.button.setFixedWidth(200)
self.button.clicked.connect(self.on_button_clicked)
self.new_text = QLabel(self) # QLabel для динамического текста
def on_button_clicked(self):
self.new_text.setText('2 Надпись')
self.new_text.move(100, 50)
self.new_text.setFixedWidth(self.new_text.sizeHint().width())
self.new_text.show()
def application():
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
application()
Код стал более структурированным и читаемым. При нажатии кнопки создается и отображается новый QLabel.
В этом уроке мы изучили основы PyQt5, создали простое приложение с надписью и кнопкой, научились обрабатывать нажатия кнопок и улучшили структуру кода с помощью классов. В последующих уроках мы продолжим изучение PyQt5, используя Qt Designer для создания более сложных интерфейсов.