PyQt QDoubleSpinBox控件用法示例詳解
QDoubleSpinBox
是 PyQt中用于輸入浮點數(shù)的控件,支持鍵盤輸入和上下箭頭調(diào)整數(shù)值。與QtSpinBox不同,QtSpinBox是用于輸入整數(shù)的控件。
關(guān)鍵屬性和方法
QDoubleSpinBox
的關(guān)鍵屬性和方法如下表所示:
方法/屬性 | 說明 |
---|---|
setRange(min, max) | 設(shè)置數(shù)值范圍 |
setSingleStep(step) | 設(shè)置步長(箭頭點擊一次的變化量) |
setDecimals(n) | 設(shè)置小數(shù)位數(shù) |
setValue(value) | 設(shè)置當(dāng)前值 |
value() | 獲取當(dāng)前值 |
valueChanged | 數(shù)值變化時觸發(fā)的信號 |
setPrefix(text) | 添加前綴文本 |
setSuffix(text) | 添加后綴文本 |
基礎(chǔ)設(shè)置方法
- setRange(min, max)
- 設(shè)置數(shù)值范圍(最小值 min,最大值 max)。
- setMinimum(min) / setMaximum(max)
- 單獨設(shè)置最小值或最大值。
- setSingleStep(step)
- 設(shè)置步長(點擊箭頭時數(shù)值的變化量)。
- setDecimals(prec)
- 設(shè)置顯示的小數(shù)位數(shù)(如 prec=2 保留兩位小數(shù))。
- setValue(value)
- 直接設(shè)置當(dāng)前值(需確保值在范圍內(nèi))。
- setPrefix(text) / setSuffix(text)
- 添加前綴或后綴文本(如單位符號)。
值獲取方法
- value()
- 返回當(dāng)前數(shù)值(浮點數(shù)類型)。
- textFromValue(value) / valueFromText(text)
- 自定義數(shù)值與文本的轉(zhuǎn)換邏輯(用于輸入驗證或格式化)。
行為控制方法
- setKeyboardTracking(enabled)
- 控制是否在輸入時實時更新值(默認 True,實時更新;設(shè)為 False 則在輸入完成后更新)。
- stepBy(steps)
- 按步長增量調(diào)整值(正數(shù)增加,負數(shù)減少)。
- stepUp() / stepDown()
- 觸發(fā)一次步長增加或減少操作。
輸入驗證方法
- setCorrectionMode(mode)
- 設(shè)置輸入修正模式(如 QDoubleSpinBox.CorrectToNearestValue 自動修正非法值)。
- validate(text, pos) / fixup(text)
- 自定義輸入驗證邏輯(需重寫方法)。
信號
- valueChanged(double)
- 數(shù)值變化時觸發(fā)的信號(參數(shù)為當(dāng)前值)。
- editingFinished()
- 用戶結(jié)束編輯(如按下回車或焦點離開)時觸發(fā)。
其他實用方法
- clear()
- 清空值(重置為最小值或 0.0,取決于范圍)。
- setAlignment(alignment)
- 設(shè)置文本對齊方式(如 Qt.AlignRight)。
- setReadOnly(enabled)
- 設(shè)為只讀模式(用戶不可編輯)。
用法示例
控件初始化
from PyQt5.QtWidgets import QApplication, QWidget, QDoubleSpinBox, QVBoxLayout app = QApplication([]) window = QWidget() layout = QVBoxLayout() # 創(chuàng)建控件并設(shè)置初始屬性 spinbox = QDoubleSpinBox() spinbox.setRange(-100.0, 100.0) # 設(shè)置數(shù)值范圍 spinbox.setSingleStep(0.5) # 設(shè)置步長(箭頭點擊一次的變化量) spinbox.setDecimals(2) # 保留兩位小數(shù) spinbox.setValue(3.14) # 設(shè)置初始值 layout.addWidget(spinbox) window.setLayout(layout) window.show() app.exec_()
信號與槽連接
當(dāng)用戶修改數(shù)值時,觸發(fā) valueChanged
信號:
def on_value_changed(value): print(f"當(dāng)前值: {value}") spinbox.valueChanged.connect(on_value_changed)
動態(tài)調(diào)整范圍
根據(jù)條件動態(tài)修改范圍或步長:
# 當(dāng)數(shù)值超過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))
高級用法:自定義步長邏輯
根據(jù)當(dāng)前值動態(tài)調(diào)整步長(如對數(shù)刻度):
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)
到此這篇關(guān)于PyQt QDoubleSpinBox控件用法詳解的文章就介紹到這了,更多相關(guān)PyQt QDoubleSpinBox控件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pandas.DataFrame.drop_duplicates 用法介紹
這篇文章主要介紹了pandas.DataFrame.drop_duplicates 用法介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07python中的import絕對導(dǎo)入與相對導(dǎo)入詳解
這篇文章主要介紹了python中的import絕對導(dǎo)入與相對導(dǎo)入詳解,在使用python做一些簡單項目時,import一般不會出現(xiàn)問題,但項目結(jié)構(gòu)復(fù)雜時,import可能發(fā)生報錯,需要的朋友可以參考下2023-11-11Python----數(shù)據(jù)預(yù)處理代碼實例
這篇文章主要介紹了Python數(shù)據(jù)預(yù)處理,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03