PyQt QDoubleSpinBox控件用法示例详解

 更新时间:2025年04月02日 09:59:50   作者: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)添加后缀文本

基础设置方法

  • setRange(min, max)
  • 设置数值范围(最小值 min,最大值 max)。
  • setMinimum(min) / setMaximum(max)
  • 单独设置最小值或最大值。
  • setSingleStep(step)
  • 设置步长(点击箭头时数值的变化量)。
  • setDecimals(prec)
  • 设置显示的小数位数(如 prec=2 保留两位小数)。
  • setValue(value)
  • 直接设置当前值(需确保值在范围内)。
  • setPrefix(text) / setSuffix(text)
  • 添加前缀或后缀文本(如单位符号)。

值获取方法

  • value()
  • 返回当前数值(浮点数类型)。
  • textFromValue(value) / valueFromText(text)
  • 自定义数值与文本的转换逻辑(用于输入验证或格式化)。

行为控制方法

  • setKeyboardTracking(enabled)
  • 控制是否在输入时实时更新值(默认 True,实时更新;设为 False 则在输入完成后更新)。
  • stepBy(steps)
  • 按步长增量调整值(正数增加,负数减少)。
  • stepUp() / stepDown()
  • 触发一次步长增加或减少操作。

输入验证方法

  • setCorrectionMode(mode)
  • 设置输入修正模式(如 QDoubleSpinBox.CorrectToNearestValue 自动修正非法值)。
  • validate(text, pos) / fixup(text)
  • 自定义输入验证逻辑(需重写方法)。

信号

  • valueChanged(double)
  • 数值变化时触发的信号(参数为当前值)。
  • editingFinished()
  • 用户结束编辑(如按下回车或焦点离开)时触发。

其他实用方法

  • clear()
  • 清空值(重置为最小值或 0.0,取决于范围)。
  • setAlignment(alignment)
  • 设置文本对齐方式(如 Qt.AlignRight)。
  • setReadOnly(enabled)
  • 设为只读模式(用户不可编辑)。

用法示例

控件初始化

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控件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 读取千万级数据自动写入 MySQL 数据库

    Python 读取千万级数据自动写入 MySQL 数据库

    这篇文章主要介绍了Python 读取千万级数据自动写入 MySQL 数据库,本篇文章会给大家系统的分享千万级数据如何写入到 mysql,分为两个场景,两种方式
    2022-06-06
  • 20招让你的Python飞起来!

    20招让你的Python飞起来!

    20招让你的 Python飞起来!这篇文章主要为大家详细介绍了Python性能优化的20条建议,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Python3+OpenCV实现简单交通标志识别流程分析

    Python3+OpenCV实现简单交通标志识别流程分析

    这篇文章主要介绍了Python3+OpenCV实现简单交通标志识别,主要思路是解析XML文档,根据<name>标签进行分类,如果是直行、右转、左转、停止就把它从原图中裁剪下来并重命名,感谢的朋友跟随小编一起看看示例代码
    2021-12-12
  • pycharm设置默认的UTF-8编码模式的方法详解

    pycharm设置默认的UTF-8编码模式的方法详解

    这篇文章主要介绍了pycharm设置默认的UTF-8编码模式,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Python3的介绍、安装和命令行的认识(推荐)

    Python3的介绍、安装和命令行的认识(推荐)

    Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。这篇文章主要介绍了Python3的介绍、安装和命令行的认识,需要的朋友可以参考下
    2018-10-10
  • Django如何继承AbstractUser扩展字段

    Django如何继承AbstractUser扩展字段

    这篇文章主要介绍了Django如何继承AbstractUser扩展字段,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Python使用Tkinter实现机器人走迷宫

    Python使用Tkinter实现机器人走迷宫

    这篇文章主要为大家详细介绍了Python使用Tkinter实现机器人走迷宫,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 浅谈Python3中datetime不同时区转换介绍与踩坑

    浅谈Python3中datetime不同时区转换介绍与踩坑

    最近的项目需要根据用户所属时区制定一些特定策略,学习、应用了若干python3的时区转换相关知识,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Python的Flask框架路由实现详解

    Python的Flask框架路由实现详解

    这篇文章主要介绍了Python的Flask框架路由实现详解,在启动程序时,python解释器会从上到下对代码进行解释,当遇到装饰器时,会执行,并把函数对应的路由以字典的形式进行存储,当请求到来时,即可根据路由查找对应要执行的函数方法,需要的朋友可以参考下
    2023-08-08
  • Python实现将json格式数据存储到Mysql数据库

    Python实现将json格式数据存储到Mysql数据库

    这篇文章主要为大家详细介绍了如何使用Python实现将json格式数据存储到Mysql数据库,文中的示例代码简洁易懂,有需要的小伙伴可以参考下
    2025-03-03

最新评论