QSpinBox简介
- QSpinBox是一个计数器控件,允许用户选择一个整数值,通过单击向上向下或者按键盘上的上下键来增加减少当前显示的值。
- 用户也可以直接输入值。
- QSpinBox的取值范围是(0-99),每次改变的步长是1。
- QSpinBox用于处理整数值,QDoubleSpinBox则用于处理浮点数值。
QSpinBox常用方法
方法 | 描述 |
---|
setMinimum() | 设置计数器的下界 |
setMaximum() | 设置计数器的上界 |
setRange() | 设置计数器的最大值,最小值,步长值 |
setValue() | 设置计数器的当前值 |
Value() | 返回计数器的当前值 |
singleStep() | 设置计数器的步长值 |
setPrefix() | 设置前缀 |
setSuffix() | 设置后缀 |
QSpinBox常用信号
信号 | 描述 |
---|
valueChanged | 计数器值变更事件 |
textChanged | 前的值发生了改变(针对字符串类型),发射该信号 |
QSpinBox举例
- textChanged信号会自动传递两个参数,self和当下控件框中的值,带有前后缀,自定义的也是当下自定义框中显示的值。
import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import (QWidget, QFormLayout, QApplication, QLabel, QSpinBox)
class MySpinBox(QSpinBox):
def textFromValue(self, v: int):
week = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', ]
return week[v]
class DemoSpinBox(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QSpinBox Demo')
self.resize(300, 250)
self.init_ui()
def init_ui(self):
lb_default = QLabel('缺省')
lb_default.setAlignment(QtCore.Qt.AlignRight)
self.sb_default = QSpinBox()
self.sb_default.valueChanged.connect(self.slot_sb_text_change)
lb_prefix = QLabel('前缀')
lb_prefix.setAlignment(QtCore.Qt.AlignRight)
self.sb_prefix = QSpinBox()
self.sb_prefix.setPrefix("¥ ")
self.sb_prefix.textChanged.connect(self.slot_sb_text_change)
lb_suffix = QLabel('后缀')
lb_suffix.setAlignment(QtCore.Qt.AlignRight)
self.sb_suffix = QSpinBox()
self.sb_suffix.setSuffix(' 元')
self.sb_suffix.textChanged.connect(self.slot_sb_text_change)
lb_user = QLabel('自定义')
lb_user.setAlignment(QtCore.Qt.AlignRight)
self.sb_user = MySpinBox()
self.sb_user.setRange(0, 6)
self.sb_user.textChanged.connect(self.slot_sb_text_change)
self.lb_value = QLabel("显示信息")
fmbox = QFormLayout(self)
fmbox.addRow(lb_default, self.sb_default)
fmbox.addRow(lb_prefix, self.sb_prefix)
fmbox.addRow(lb_suffix, self.sb_suffix)
fmbox.addRow(lb_user, self.sb_user)
fmbox.addWidget(self.lb_value)
def slot_sb_text_change(self, a0):
if self.sender() == self.sb_default:
print("你正在改变sb_default中的值")
elif self.sender() == self.sb_prefix:
print("你正在改变sb_prefix中的值")
self.lb_value.setText('current value is:' + str(a0))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoSpinBox()
window.show()
sys.exit(app.exec_())
QDoubleSpinBox
- QDoubleSpinBox的默认精度是两位小数,但可以通过setDecimals()来设置。