欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

PyQt QDoubleSpinBox控件用法示例详解

2025年04月02日 C/C++
qdoublespinbox是 pyqt中用于输入浮点数的控件,支持键盘输入和上下箭头调整数值。与qtspinbox不同,qtspinbox是用于输入整数的控件。关键属性和方法qdoublespinb

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