PyQt5: Создаем GUI с кнопками и надписями

Этот урок посвящен созданию простейшего графического интерфейса пользователя (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 для создания более сложных интерфейсов.

Что будем искать? Например,программа