PyQt QSlider в Python — как использовать
Слайдер — это виджет для управления ограниченным значением. Ползунок позволяет перемещать ручку по горизонтальной или вертикальной канавке. Слайдер преобразует положение ручки в целое число в допустимом диапазоне.
- Знакомство с PyQt QSlider
- Диапазон
- Шаг
- Шаг страницы
- Установка текущего значения
- Отображение шкалы делений
- Интервал установки
- Сигналы
- Пример PyQt QSlider
Знакомство с PyQt QSlider
Для создания виджета-слайдера в Python используйте класс PyQt QSlider:
QSlider(orientation[, parent=None])
QSlider принимает два аргумента:
- Orientation определяет ориентацию ползунка. Допустимые значения: Qt.Orientation.Vertical и Qt.Orientation.Horizontal.
- Parent — родительский виджет слайдера.
Например, следующий код создает горизонтальный ползунок:
slider = QSlider(Qt.Orientation.Horizontal, self)
Выход:
А следующий код создает вертикальный слайдер:
slider = QSlider(Qt.Orientation.Vertical, self)
Выход:
Диапазон
Чтобы задать диапазон значений для ползунка, используйте метод setRange():
slider.setRange(min,max)
Также вы можете установить методы setMinimum() или setMaximum():
slider.setMinimum(min) slider.setMaximum(max)
Шаг
При нажатии клавиши со стрелкой вверх/вниз или влево/вправо ручка ползунка будет увеличиваться/уменьшаться на один шаг.
Чтобы задать один шаг, используйте метод setSingleStep():
slider.setSingleStep(step)
Шаг страницы
Если нажать клавишу page up / page down, ручка ползунка увеличит/уменьшит шаг страницы. Чтобы установить шаг страницы, используйте метод setPageStep():
slider.setPageStep(pageStep)
Установка текущего значения
Чтобы установить значение для ползунка, используйте метод setValue():
slider.setValue(value)
Метод value() возвращает текущее значение ползунка:
current_value = slider.value()
Отображение шкалы делений
По умолчанию ползунок не имеет делений. Чтобы отобразить деления, используйте метод setTickPosition(). Метод setTickPosition устанавливает свойство TickPosition в значение.
Горизонтальный ползунок имеет две опции:
QSlider.TicksAbove – показывает деления над ползунком:
QSlider.TicksBelow – показывает деления под ползунком.
Вертикальный слайдер также имеет две опции:
QSlider.TicksLeft – показывает деления слева от ползунка:
QSlider.TicksRight – показывает деления справа от ползунка:
QSlider.TicksBothSides показывает деления по обеим сторонам канавки:
По умолчанию TickPosition имеет значение QSlider.NoTicks, то есть не отображает никаких делений.
Интервал установки
Для установки интервала между делениями используется метод setTickInteral(). По умолчанию интервал равен нулю.
Если интервал равен нулю, ползунок выберет между singleStep и pageStep.
Сигналы
QSlider имеет несколько сигналов, но самый важный из них — valueChanged. QSlider испускает сигнал valueChanged всякий раз, когда изменяется значение ползунка.
Пример PyQt QSlider
Следующая программа использует класс QSlider для создания ползунка. Метка отображает текущее значение ползунка.
import sys from PyQt6.QtWidgets import QApplication, QWidget, QSlider, QLabel, QFormLayout from PyQt6.QtCore import Qt class MainWindow(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle('PyQt QSlider') self.setMinimumWidth(200) # create a grid layout layout = QFormLayout() self.setLayout(layout) slider = QSlider(Qt.Orientation.Horizontal, self) slider.setRange(0, 100) slider.setValue(50) slider.setSingleStep(5) slider.setPageStep(10) slider.setTickPosition(QSlider.TickPosition.TicksAbove) slider.valueChanged.connect(self.update) self.result_label = QLabel('', self) layout.addRow(slider) layout.addRow(self.result_label) # show the window self.show() def update(self, value): self.result_label.setText(f'Current Value: {value}') if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() sys.exit(app.exec())
Выход:
Как это работает.
- Сначала создайте объект QSlider:
slider = QSlider(Qt.Orientation.Horizontal, self)
- Далее задайте диапазон, значение, один шаг, шаг страницы и положение отметки:
slider.setRange(0, 100) slider.setValue(50) slider.setSingleStep(10) slider.setPageStep(20) slider.setTickPosition(QSlider.TickPosition.TicksAbove)
- Затем подключите сигнал valueChanged() к методу update():
slider.valueChanged.connect(self.update)
- После этого создайте объект QLabel, который будет отображать текущее значение ползунка всякий раз, когда значение ползунка изменяется:
self.result_label = QLabel('', self)
- Наконец, определите метод update(), который изменяет текст QLabel на текущее значение ползунка:
def update(self, value): self.result_label.setText(f'Current Value: {value}')