QSpinBox是一个计数器控件,允许用户选择一个整数值,通过单击向上/向下按钮或按键盘上的上/下箭头来增加/减少当前显示的值,当然用户也可以输入值。
在默认情况下,QSpinBox的取值范围是0~99,每次改变的步长值为1。QSpinBox类和QDoubleSpinBox类均派生自QAbstractSpinBox类。
QSpinBox用于处理整数值,QDoubleSpinBox则用于处理浮点值,它们之间的区别就是处理数据的类型不同,其他功能都基本相同。QDoubleSpinBox的默认精度是两位小数,但可以通过setDecimals()来改变。
| 方法 | 描述 |
|---|---|
| setMinimum() | 设置计数器的下界 |
| setMaximum() | 设置计数器的上界 |
| setRange() | 设置计数器的最大值、最小值和步长值 |
| setValue() | 设置计数器的当前值 |
| Value() | 返回计数器的当前值 |
| singleStep() | 设置计数器的步长值 |
每次单击向上/向下按钮时,QSpinBox计数器都会发射 valueChanged信号,可以从相应的槽函数中通过value()函数获得计数器的当前值。
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class spindemo(QWidget):
def __init__(self,parent = None):
super(spindemo, self).__init__(parent)
self.setWindowTitle("SpinBox案例")
self.resize(300 , 100)
layout = QVBoxLayout()
self.l1 = QLabel("current value:")
self.l1.setAlignment(Qt.AlignCenter)
layout.addWidget(self.l1)
self.sp = QSpinBox()
layout.addWidget(self.sp)
self.sp.valueChanged.connect(self.valuechange)
self.setLayout(layout)
def valuechange(self):
self.l1.setText("current value :" + str(self.sp.value()))
if __name__ == '__main__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = spindemo()
win.show()
sys.exit(app.exec_())

QSlider 控件提供了一个垂直或水平的滑动条,滑动条是一个用于控制有界值的典型控件,它允许用户沿水平或垂直方向在某一范围内移动滑块,并将滑块所在的位置转换成一个合法范围内的整数值。有时候这种方式比输入数字或者使用SpinBox(计数器)更加自然。在槽函数中对滑块所在位置的处理相当于从整数之间的最小值和最高值进行取值。
一个滑块条控件可以以水平或垂直的方式显示,在构造函数中进行设置。
self.sp=QSlider(Qt.Horizontal)
self.sp=QSlider(Qt.Vertical)
| 方法 | 描述 |
|---|---|
| setMinimum() | 设置滑动条控件的最小值 |
| setMaximum() | 设置滑动条控件的最大值 |
| setSingleStep() | 设置滑动条控件递增/递减的步长值 |
| setValue() | 设置滑动条控件的值 |
| value() | 获得滑动条控件的值 |
| setTickInterval() | 设置刻度间隔 |
| setTickPosition() | 设置刻度标记的位置,可以输入一个枚举值,这个枚举值指定刻度线相对于滑块和用户操作的位置,以下是可以输入的枚举值t - QSlider.NoTicks,不绘制任何刻度线 - QSlider.TicksBothSides,在滑块的两侧绘制刻度线 - QSlider.TicksAbove,在(水平)滑块上方绘制刻度线 - QSlider.TicksBelow,在(水平)滑块下方绘制刻度线 QSlider.TicksLeft,在(垂直)滑块左侧绘制刻度线 - QSlider.TicksRight,在(垂直)滑块右侧绘制刻度线 |
| 信号 | 描述 |
|---|---|
| valueChanged | 当滑块的值发生改变时发射此信号,此信号是最常用的 |
| sliderPressed | 当用户按下滑块时发射此信号 |
| sliderMoved | 当用户拖动滑块时发射此信号 |
| sliderReleased | 当用户释放滑块时发射此信号 |
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class SliderDemo(QWidget):
def __init__(self,parent = None):
super(SliderDemo, self).__init__(parent)
self.setWindowTitle("QSlider案例")
self.resize(300 , 100)
layout = QVBoxLayout()
self.l1 = QLabel("Hello DingJiaxiong")
self.l1.setAlignment(Qt.AlignCenter)
layout.addWidget(self.l1)
# 水平
self.s1 = QSlider(Qt.Horizontal)
# 设置最小值
self.s1.setMinimum(10)
# 设置最大值
self.s1.setMaximum(50)
# 步长
self.s1.setSingleStep(3)
# 设置当前值
self.s1.setValue(20)
## 刻度位置
self.s1.setTickPosition(QSlider.TicksBelow)
# 设置刻度间隔
self.s1.setTickInterval(5)
layout.addWidget(self.s1)
# 连接信号槽
self.s1.valueChanged.connect(self.valuechange)
self.setLayout(layout)
def valuechange(self):
print("Current slider value = %s" % self.s1.value())
size = self.s1.value()
self.l1.setFont(QFont("Arial",size))
if __name__ == '__main__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = SliderDemo()
win.show()
sys.exit(app.exec_())
