一、Qslider
QSlider是一个滑动条,可以设置成水平或垂直放置。最常用的方法允许用户在某一范围内互动该滑块,并将滑块的位置转换成一个整数值(int类型),这种方式可以在某一个范围内平顺的变动,并触发valuechangd信号,产生相应变化。但QSlider能发射的信号并不局限于这一种:
- valuechanged。滑块位置变动时发射此信号;
- sliderPressed。当用户按下滑块时就会发射该信号;
- sliderMoved。当用户拖动滑块时发射信号;
- sliderReleased。用户释放滑块时发射该信号。
import sys,os
from PyQt5.QtWidgets import QWidget,QSlider,QApplication,QLabel,QVBoxLayout
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt path = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) class MyWindow(QWidget): def __init__(self):
super().__init__()
self.initUI() def initUI(self):
self.setWindowTitle('QSlider示例')
self.setWindowIcon(QIcon(r'%s\4.图标素材\chuan.ico' % path))
self.setGeometry(600,300,300,150) self.lbl = QLabel('当前值为:0')
self.sl = QSlider(Qt.Horizontal)
self.sl.setMaximum(20) #设定最大值
self.sl.setMinimum(-20) #设定最小值
self.sl.setSingleStep(2) #设定最小值 vbx = QVBoxLayout()
vbx.addWidget(self.lbl)
vbx.addWidget(self.sl)
self.setLayout(vbx) self.sl.valueChanged.connect(self.valuechanged) def valuechanged(self):
#print(type(self.sl.value()))
self.lbl.setText('当前值为:' + str(self.sl.value())) if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
QSlider示例
示例中使用Qt.Horizontal将滑块设置为水平,也可以通过Qt.Vertical将滑块设置为垂直的。需要说明的是通过setSingleStep()设置步长后,只是通过键盘移动滑块时,步长变为设定值。通过鼠标移动滑块时,步长仍然为1。而且,通过键盘的Home 键可将滑块移动至起始位置,即最小值。同理,End 键移动至结束位置(最大值)。如果不设置最大值和最小值,默认范围是0到99.
除此之外,Qslider还可以设置刻度标记,并且标记的位置可以调整。
QSlider::NoTicks | 0 | 不绘制任何刻度线 |
QSlider::TicksBothSides | 3 | 在滑块的两侧绘制刻度线 |
QSlider::TicksAbove | 1 | 在(水平)滑块上方绘制刻度线 |
QSlider::TicksBelow | 2 | 在(水平)滑块下方绘制刻度线 |
QSlider::TicksLeft | TicksAbove | 在(垂直)滑块左侧绘制刻度线 |
QSlider::TicksRight | TicksBelow | 在(垂直)滑块右侧绘制刻度线 |
二、QSpinBox
QSpinBox是一个计数器控件,允许用户选择一个整数值通过单击向上向下或者按键盘上的上下键来增加减少当前显示的值。不过也可以手动输入指定值 。和Slider一样,默认的取值范围是0到99,每次改变的步长是1 。
QSpinBox类和QDoubleSpinbox类均派生自QAbstractSpinBox类,QSpinBox用于处理整数值,QDoubleSpinBox则用于处理浮点数值,他们之间的区别就是处理数据的类型不同,其他功能基本相同,QDoubleSpinBox的默认精度是两位小数,但可以通过setDecimals()来改变。
import sys,os
from PyQt5.QtWidgets import QWidget,QSpinBox,QApplication,QLabel,QVBoxLayout
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt path = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) class MyWindow(QWidget): def __init__(self):
super().__init__()
self.initUI() def initUI(self):
self.setWindowTitle('QSpinBox示例')
self.setWindowIcon(QIcon(r'%s\4.图标素材\chuan.ico' % path))
self.setGeometry(600,300,200,150) self.lbl = QLabel('当前值为:0')
self.lbl.setAlignment(Qt.AlignCenter)
self.sp = QSpinBox()
# self.sp.setMaximum(-10)
# self.sp.setMaximum(20)
self.sp.setRange(-10,10)
self.sp.setSingleStep(2) vbx = QVBoxLayout()
vbx.addWidget(self.lbl)
vbx.addWidget(self.sp)
self.setLayout(vbx) self.sp.valueChanged.connect(self.valuechanged) def valuechanged(self):
self.lbl.setText('当前值为:' + str(self.sp.value())) if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
QSpinBox示例
最大值和最小值可以通过setMaxmum()和setMinimum()分别设置,也可以通过setRange()一次设定好范围。注意,亲测setRange()不能设置步长。