Python PyQt: распространённые виджеты

PyQt — это набор инструментов для программирования GUI на языке Python, и это Python-привязка для фреймворка приложений Qt.

Qt — это кросс-платформенный фреймворк для разработки GUI-приложений на C++, широко используемый для разработки GUI-программ.

PyQt предоставляет богатый набор виджетов для создания пользовательских интерфейсов; эти виджеты — базовые строительные блоки для создания GUI-приложений.


Базовые оконные виджеты

QMainWindow

QMainWindow — это класс главного окна, предоставляющий стандартный каркас приложения:

Пример

from PyQt5.QtWidgets import QMainWindow, QApplication

app = QApplication([])
window = QMainWindow()
window.setWindowTitle('Main Window Example')
window.setGeometry(100, 100, 800, 600)  # x, y, ширина, высота
window.show()
app.exec_()

QWidget

QWidget — базовый класс для всех объектов пользовательского интерфейса:

Пример

from PyQt5.QtWidgets import QWidget

widget = QWidget()
widget.setWindowTitle('Basic Window')
widget.show()

Общие виджеты ввода

QLabel

Отображает текст или изображения:

Пример

from PyQt5.QtWidgets import QLabel

label = QLabel('Это метка')
label.setStyleSheet('font-size: 16px; color: blue;')

QLineEdit

Однострочное поле ввода текста:

Пример

from PyQt5.QtWidgets import QLineEdit

line_edit = QLineEdit()
line_edit.setPlaceholderText('Пожалуйста, введите содержимое...')

QTextEdit

Многострочный текстовый редактор:

Пример

from PyQt5.QtWidgets import QTextEdit

text_edit = QTextEdit()
text_edit.setPlainText('Многострочный текстовый редактор')

QComboBox

Выпадающий список выбора:

Пример

from PyQt5.QtWidgets import QComboBox

combo = QComboBox()
combo.addItems(['Вариант 1', 'Вариант 2', 'Вариант 3'])

Кнопочные виджеты

QPushButton

Обычная кнопка:

Пример

from PyQt5.QtWidgets import QPushButton

button = QPushButton('Нажми меня')
button.setStyleSheet('background-color: green; color: white;')

QRadioButton

Радиокнопка:

Пример

from PyQt5.QtWidgets import QRadioButton

radio1 = QRadioButton('Вариант 1')
radio2 = QRadioButton('Вариант 2')

QCheckBox

Флажок:

Пример

from PyQt5.QtWidgets import QCheckBox

check1 = QCheckBox('Выбор 1')
check2 = QCheckBox('Выбор 2')

Виджеты компоновки

QHBoxLayout

Горизонтальная компоновка:

Пример

from PyQt5.QtWidgets import QHBoxLayout, QPushButton

h_layout = QHBoxLayout()
h_layout.addWidget(QPushButton('Лево'))
h_layout.addWidget(QPushButton('Центр'))
h_layout.addWidget(QPushButton('Право'))

QVBoxLayout

Вертикальное расположение:

Пример

from PyQt5.QtWidgets import QVBoxLayout, QPushButton

v_layout = QVBoxLayout()
v_layout.addWidget(QPushButton('Верх'))
v_layout.addWidget(QPushButton('Середина'))
v_layout.addWidget(QPushButton('Низ'))

QGridLayout

Макет сетки:

Пример

from PyQt5.QtWidgets import QGridLayout, QPushButton

grid = QGridLayout()
grid.addWidget(QPushButton('(0,0)'), 0, 0)
grid.addWidget(QPushButton('(0,1)'), 0, 1)
grid.addWidget(QPushButton('(1,0)'), 1, 0)

Расширенные виджеты

QTableWidget

Табличный виджет:

Пример

from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem

table = QTableWidget(3, 3)  # 3 строки 3 столбца
table.setHorizontalHeaderLabels(['Столбец 1', 'Столбец 2', 'Столбец 3'])
table.setItem(0, 0, QTableWidgetItem('Data 1'))

QTreeWidget

Виджет дерева:

Пример

from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem

tree = QTreeWidget()
tree.setHeaderLabels(['Имя', 'Значение'])
root = QTreeWidgetItem(tree, ['Корневой узел'])
child = QTreeWidgetItem(root, ['Дочерний узел', '123'])

QTabWidget

Виджет вкладок:

Пример

from PyQt5.QtWidgets import QTabWidget, QWidget

tab = QTabWidget()
tab.addTab(QWidget(), 'Вкладка 1')
tab.addTab(QWidget(), 'Вкладка 2')

Диалоговые виджеты

QMessageBox

Диалоговое окно сообщения:

Пример

from PyQt5.QtWidgets import QMessageBox

msg = QMessageBox()
msg.setWindowTitle('Подсказка')
msg.setText('Это диалоговое окно сообщения')
msg.setIcon(QMessageBox.Information)
msg.exec_()

QFileDialog

Диалог выбора файла:

Пример

from PyQt5.QtWidgets import QFileDialog

file_name = QFileDialog.getOpenFileName(None, 'Выбор файла', '', 'Текстовые файлы (*.txt);;Все файлы (*)')

Настройки стиля

PyQt поддерживает использование стилей CSS для оформления виджетов:

Пример

button = QPushButton('Стильная кнопка')
button.setStyleSheet('''
    QPushButton {
        background-color: #4C7EAF;
        border: none;
        color: white;
        padding: 10px 24px;
        text-align: center;
        font-size: 16px;
        margin: 4px 2px;
        border-radius: 8px;
    }
    QPushButton:hover {
        background-color: #4777A6;
    }
'''
)
Другие расширения