PyQt5 组件之QSlider

本文介绍了PyQt5中的QSlider控件,详细讲解了其功能和常见方法,如设置最小值、最大值、步长、当前值以及刻度设置。并提供了信号槽机制的示例,展示如何在滑块值改变时更新标签的字体大小。通过实例代码展示了如何使用QSlider创建交互式的GUI应用。

QSlider简介

QSlider控件提供一个垂直或者水平的滑动条,滑动条是一个用于控制有界值典型的控件,它允许用户沿水平或者垂直方向在某一范围内移动滑块,并将滑块所在的位置转换为一个合法范围内的整数值,有时候这中方式比输入数字或者使用SpinBox(计数器·)更加自然,在槽函数中对滑块所在位置的处理相当于从整数之间的最小值和最高值进行取值。

QSlider类中常用的方法

方法描述
setMinimum()设置滑动条控件的最小值
setMaximum()设置滑动条控件的最大值
setSingleStep()设置滑动条控件的步长
setValue()设置滑动条控件的值
value()获取滑动条控件的值
setTickInterval()设置刻度间隔
setTickPosition()设置刻度标记的位置,可以输入一个枚举值,这个枚举值指定刻度线想当与滑块和用户操作的位置,以下是可以输入的枚举值:
QSlider.NoTicks:不绘制任何刻度线
QSlider.TicksBothSides:在滑块的两侧绘制刻度线
QSlider.TicksAbove:在滑块的(水平)上方绘制刻度线
QSlider.TicksBelow:在滑块的(水平)下方绘制刻度线
QSlider.TicksLeft:在滑块的(垂直)左侧绘制刻度线
QSlider.TicksRight,在滑块的(垂直)右侧绘制刻度线

QSlider类中的常用信号

信号描述
vlaueChanged当滑块的值发生改变时发射此信号,此信号是最常用的
sliderPressed当用户按下滑块时发射此信号
sliderMoved当用户拖动滑块时发射此信号
slierReleased当用户释放滑块时发射此信号

QSlider效果截图:

  PyQt 设计器截图:

 *.ui 转换为*.py 代码 

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled6.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
import sys

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QApplication, QMainWindow, QSlider


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setGeometry(QtCore.QRect(230, 80, 261, 42))
        self.widget.setObjectName("widget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label, 0, QtCore.Qt.AlignHCenter)
        self.horizontalSlider = QtWidgets.QSlider(self.widget)
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName("horizontalSlider")
        self.verticalLayout.addWidget(self.horizontalSlider)

        ##设置最小值
        self.horizontalSlider.setMinimum(10)
        # 设置最大值
        self.horizontalSlider.setMaximum(50)
        # 步长
        self.horizontalSlider.setSingleStep(3)
        # 设置当前值
        self.horizontalSlider.setValue(20)
        # 刻度位置,刻度下方
        self.horizontalSlider.setTickPosition(QSlider.TicksBelow)
        # 设置刻度间距
        self.horizontalSlider.setTickInterval(5)
        # 设置连接信号槽函数
        self.horizontalSlider.valueChanged.connect(self.valuechange)

        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "TextLabel"))

    def valuechange(self):
        # 输出当前地刻度值,利用刻度值来调节字体大小
        print('当前刻度值=%s' % self.horizontalSlider.value())
        size = self.horizontalSlider.value()
        self.label.setFont(QFont('Arial', size))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

 需要向PyUIC 生成的代码,添加如下代码片段:

重点实现QSlider属性设置和事件绑定

        ##设置最小值
        self.horizontalSlider.setMinimum(10)
        # 设置最大值
        self.horizontalSlider.setMaximum(50)
        # 步长
        self.horizontalSlider.setSingleStep(3)
        # 设置当前值
        self.horizontalSlider.setValue(20)
        # 刻度位置,刻度下方
        self.horizontalSlider.setTickPosition(QSlider.TicksBelow)
        # 设置刻度间距
        self.horizontalSlider.setTickInterval(5)
        # 设置连接信号槽函数
        self.horizontalSlider.valueChanged.connect(self.valuechange)
 def valuechange(self):
        # 输出当前地刻度值,利用刻度值来调节字体大小
        print('当前刻度值=%s' % self.horizontalSlider.value())
        size = self.horizontalSlider.value()
        self.label.setFont(QFont('Arial', size))

PyQt5中的QSlider组件是一个用于在给定范围内选择数值的滑块控件。默认情况下,QSlider是单滑块的,但你可以通过自定义实现双滑块功能。以下是如何在PyQt5中实现双滑块QSlider的示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QSlider, QHBoxLayout, QLabel from PyQt5.QtCore import Qt, QObject, pyqtSignal, QRangeSlider class DoubleSlider(QWidget): def __init__(self, parent=None): super(DoubleSlider, self).__init__(parent) self.slider = QRangeSlider(Qt.Horizontal, self) self.slider.setRange(0, 100) self.slider.setRange(20, 80) self.label_min = QLabel("Min: 20", self) self.label_max = QLabel("Max: 80", self) layout = QHBoxLayout() layout.addWidget(self.label_min) layout.addWidget(self.slider) layout.addWidget(self.label_max) self.setLayout(layout) self.slider.startValueChanged.connect(self.on_start_value_changed) self.slider.endValueChanged.connect(self.on_end_value_changed) def on_start_value_changed(self, value): self.label_min.setText(f"Min: {value}") def on_end_value_changed(self, value): self.label_max.setText(f"Max: {value}") class QRangeSlider(QWidget): startValueChanged = pyqtSignal(int) endValueChanged = pyqtSignal(int) def __init__(self, orientation, parent=None): super(QRangeSlider, self).__init__(parent) self.orientation = orientation self.start_value = 20 self.end_value = 80 self.setMinimumSize(100, 50) def setRange(self, start, end): self.start_value = start self.end_value = end self.startValueChanged.emit(self.start_value) self.endValueChanged.emit(self.end_value) def setStartValue(self, value): self.start_value = value self.startValueChanged.emit(self.start_value) def setEndValue(self, value): self.end_value = value self.endValueChanged.emit(self.end_value) if __name__ == "__main__": app = QApplication(sys.argv) window = DoubleSlider() window.show() sys.exit(app.exec_()) ``` 在这个示例中,我们创建了一个自定义的`DoubleSlider`类,该类包含一个水平方向的`QRangeSlider`控件和两个`QLabel`标签。`QRangeSlider`是一个自定义的滑块控件,用于显示和调整最小值和最大值。`DoubleSlider`类通过连接`QRangeSlider`的信号来更新标签文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值