python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > PyQt QDoubleSpinBox控件

PyQt QDoubleSpinBox控件用法示例详解

作者:QMT量化交易

QDoubleSpinBox 是 PyQt中用于输入浮点数的控件,支持键盘输入和上下箭头调整数值,本文给大家介绍PyQt QDoubleSpinBox控件用法,感兴趣的朋友一起看看吧

QDoubleSpinBox 是 PyQt中用于输入浮点数的控件,支持键盘输入和上下箭头调整数值。与QtSpinBox不同,QtSpinBox是用于输入整数的控件。

关键属性和方法

QDoubleSpinBox 的关键属性和方法如下表所示:

方法/属性说明
setRange(min, max)设置数值范围
setSingleStep(step)设置步长(箭头点击一次的变化量)
setDecimals(n)设置小数位数
setValue(value)设置当前值
value()获取当前值
valueChanged数值变化时触发的信号
setPrefix(text)添加前缀文本
setSuffix(text)添加后缀文本

基础设置方法

值获取方法

行为控制方法

输入验证方法

信号

其他实用方法

用法示例

控件初始化

from PyQt5.QtWidgets import QApplication, QWidget, QDoubleSpinBox, QVBoxLayout
app = QApplication([])
window = QWidget()
layout = QVBoxLayout()
# 创建控件并设置初始属性
spinbox = QDoubleSpinBox()
spinbox.setRange(-100.0, 100.0)   # 设置数值范围
spinbox.setSingleStep(0.5)        # 设置步长(箭头点击一次的变化量)
spinbox.setDecimals(2)            # 保留两位小数
spinbox.setValue(3.14)            # 设置初始值
layout.addWidget(spinbox)
window.setLayout(layout)
window.show()
app.exec_()

信号与槽连接

当用户修改数值时,触发 valueChanged 信号:

def on_value_changed(value):
    print(f"当前值: {value}")
spinbox.valueChanged.connect(on_value_changed)

动态调整范围

根据条件动态修改范围或步长:

# 当数值超过50时,自动扩展范围
def check_range(value):
    if value > 50.0:
        spinbox.setRange(0.0, 100.0)
    else:
        spinbox.setRange(0.0, 50.0)
spinbox.valueChanged.connect(check_range)

格式化显示

添加前缀/后缀或自定义格式:

spinbox.setPrefix("温度: ")     # 添加前缀
spinbox.setSuffix("°C")        # 添加后缀
# 使用自定义格式(如货币)
spinbox.setDecimals(0)
spinbox.setPrefix("$ ")

输入验证

限制用户输入非法值(如超过范围时自动修正):

spinbox.setKeyboardTracking(False)  # 输入完成后再验证(而非实时)
def validate_input(value):
    if value < 0:
        return 0.0  # 自动修正为最小值
    return value
spinbox.valueFromText = lambda text: validate_input(float(text))

高级用法:自定义步长逻辑

根据当前值动态调整步长(如对数刻度):

def dynamic_step(value):
    if value < 1.0:
        return 0.1
    elif value < 10.0:
        return 0.5
    else:
        return 1.0
spinbox.setSingleStep(0.1)  # 初始步长
def on_step_up():
    current = spinbox.value()
    step = dynamic_step(current)
    spinbox.setValue(current + step)
def on_step_down():
    current = spinbox.value()
    step = dynamic_step(current)
    spinbox.setValue(current - step)
# 替换默认的上下箭头行为
spinbox.stepUp.connect(on_step_up)
spinbox.stepDown.connect(on_step_down)

到此这篇关于PyQt QDoubleSpinBox控件用法详解的文章就介绍到这了,更多相关PyQt QDoubleSpinBox控件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文