我們在上一章講了步長調節器QAbstractSpinBox,這一節來講一下它的一個子類:QSpinBox
一.描述
QSpinBox是一個主要處理整數和離散值集合的步長調節器控件,它允許用戶通過單擊增減按鈕或用鍵盤輸入值來實現當前顯示值的改變。它主要顯示整數,也可以通過自定義顯示一些離散的值集(周一~周日)
QSpinBox繼承了QAbstractSpinBox,可以使用父類的各種API。
二.功能
1.構造函數
from PyQt5.Qt import * import sys class Window(QWidget): def __init__(self): super().__init__() self.UI_SetUp() def UI_SetUp(self): sb = QSpinBox(self) sb.resize(150,50) sb.move(100,100) self.sb = sb pass if __name__ =='__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
創建的控件在默認情況下數值范圍是從0到99
2.最大值和最小值
QSpinBox.setMinimum() #設定最大值 QSpinBox.setMaximum() #設定最小值 QSpinBox.setRange(min,max) #設定范圍 QSpinBox.maximum() #獲取最大值 QSpinBox.minimum() #獲取最小值
3.數值循環
可以通過設置數值循環,在數據到最大值時可以直接轉到最小值(反之也可以)
QSpinBox.setWrapping(True) #啟用數值循環 QSpinBox.wrapping() #是否啟用數值循環
4.步長設置
QSpinBox.setWrapping() #設定步長 QSpinBox.singleStep() #獲取步長——>str
設定好步長每次加減的數值按設定值操作。
5.前綴和后綴和最小值特殊文本
QSpinBox.setPrefix() #設定前綴 QSpinBox.setSuffix() #設定后綴 QSpinBox.prefix() #獲取前綴——>str QSpinBox.suffix() #獲取后綴——>str
加了前綴或后綴只改變數值,前后綴不變化

還可以在最小值時顯示一個固定的字符,比如0元的時候定義為免費
QSpinBox.setSpecialValueText('') #設置最小值對應文本 QSpinBox.specialValueText() #獲取最小值對應文本——>str
在最小值時顯示設定的文本,設定后是不會顯示前后綴字符串的。(這個用法是父類的)
6.進制更改
QSpinBox.setDisplayIntegerBase(int) #設置進制 QSpinBox.displayIntegerBase() #獲取進制——>str
這里設置的進制是不光常用的二進制、八進制和十進制的,任何一個整數是都可以的(還可以大於16,不過實際沒什么意義,0-F后可以繼續)
7.數值的設置和獲取
QSpinBox.setValue() #設定值 QSpinBox.value() #獲取int的值
這里用的value獲取的是int對應的值,不包含前后綴,最小值時不對應特殊文本
8.自定義展示格式
我們可以通過重寫下面的函數來實現自定義的格式顯示
class SB(QSpinBox): def textFromValue(self, v: int): pass
這個函數傳遞了當前的整數值,
from PyQt5.Qt import * import sys class SB(QSpinBox): def textFromValue(self, v: int): #自定義展示格式 week = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六',] weekday = week[v] return weekday class Window(QWidget): def __init__(self): super().__init__() self.UI_SetUp() def UI_SetUp(self): sb = SB(self) #調用的是自定義的QSpinBox控件 sb.resize(100,30) sb.move(100,100) sb.setRange(0,6) self.sb = sb pass if __name__ =='__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
這樣就顯示的是周日到周六了。
三.信號
除了繼承父類的
QSpinBox.editingFinished()
結束編輯信號外,它還帶有另外一種信號
QSpinBox.valueChanged()
它傳遞有int類型的信號,還可以重構一下發送字符串類型的數據
QSpinBox.valueChanged[str]()
發送字符串時是按照當前顯示的狀態發送的,包含有前后綴以及自定義的顯示類型。
