PyQt5 Tutorials

Кнопки PyQt5: Полное руководство

Spread the love

Это руководство представляет собой исчерпывающее введение в виджет QPushButton библиотеки PyQt5 и его взаимодействие с другими основными элементами. Мы начнём с базовой реализации кнопки, изучая методы стилизации и обработки событий для создания интерактивных и визуально привлекательных приложений.

Содержание

  1. Создание кнопки
  2. Стилизация кнопки
  3. Обработка нажатий кнопки: сигналы и слоты
  4. Интеграция с QLabel: отображение информации
  5. Продвинутая стилизация с помощью QStyleSheet

1. Создание кнопки

QPushButton является фундаментальным строительным блоком в разработке GUI с PyQt5. Давайте создадим простую кнопку:


import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Моё приложение PyQt5")

button = QPushButton("Нажми меня!")
layout = QVBoxLayout()
layout.addWidget(button)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())

Этот код создаёт окно, содержащее кнопку с надписью «Нажми меня!». Кнопка пока неактивна; мы добавим функциональность в следующем разделе.

2. Стилизация кнопки

PyQt5 предлагает различные способы настройки внешнего вида ваших кнопок. Мы можем изменить текст, шрифт и даже добавить значки:


import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
from PyQt5.QtGui import QFont, QIcon

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Стилизованная кнопка")

button = QPushButton("Нажми меня!")
button.setFont(QFont('Arial', 12)) #установка шрифта
button.setIcon(QIcon('path/to/your/icon.png')) #добавление значка (замените на путь к вашему значку)
layout = QVBoxLayout()
layout.addWidget(button)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())

Не забудьте заменить 'path/to/your/icon.png' на фактический путь к вашему файлу значка.

3. Обработка нажатий кнопки: сигналы и слоты

Чтобы сделать кнопку интерактивной, мы используем сигналы и слоты. Сигнал генерируется при возникновении события (например, нажатия кнопки), а слот — это функция, которая реагирует на сигнал.


import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLabel

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Интерактивная кнопка")

button = QPushButton("Нажми меня!")
label = QLabel("Кнопка ещё не нажата.")
layout = QVBoxLayout()
layout.addWidget(button)
layout.addWidget(label)
window.setLayout(layout)

def on_button_click():
    label.setText("Кнопка нажата!")

button.clicked.connect(on_button_click) #подключение сигнала к слоту

window.show()
sys.exit(app.exec_())

В этом примере сигнал clicked кнопки подключается к функции on_button_click, которая обновляет метку, указывая на то, что кнопка была нажата.

4. Интеграция с QLabel: отображение информации

Виджеты QLabel идеально подходят для отображения текста или изображений вместе с кнопками. Вот как их комбинировать:


# (Код из раздела 3 может быть расширен здесь, чтобы включить QLabel для отображения информации)

(Код из раздела 3 может быть легко расширен, чтобы включить QLabel для отображения информации. Для краткости это не показано здесь явно, но концепция продемонстрирована в предыдущем примере.)

5. Продвинутая стилизация с помощью QStyleSheet

Для более сложной стилизации используйте QStyleSheet. Это позволяет применять стили, подобные CSS, к вашим виджетам.


import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
from PyQt5.QtCore import Qt

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Пример QStyleSheet")

button = QPushButton("Нажми меня!")
button.setStyleSheet("QPushButton { background-color: lightblue; color: darkblue; border-radius: 10px; padding: 10px; }")
layout = QVBoxLayout()
layout.addWidget(button)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())

Здесь используется QStyleSheet для стилизации кнопки с светло-голубым фоном, тёмно-синим текстом, закруглёнными углами и отступами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *