Это руководство представляет собой исчерпывающее введение в виджет QPushButton
библиотеки PyQt5 и его взаимодействие с другими основными элементами. Мы начнём с базовой реализации кнопки, изучая методы стилизации и обработки событий для создания интерактивных и визуально привлекательных приложений.
Содержание
- Создание кнопки
- Стилизация кнопки
- Обработка нажатий кнопки: сигналы и слоты
- Интеграция с QLabel: отображение информации
- Продвинутая стилизация с помощью 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 для стилизации кнопки с светло-голубым фоном, тёмно-синим текстом, закруглёнными углами и отступами.