GUI学习之十四——QAbstractSpinBox学习总结
QAbstractSpinBox是一個抽象類,是將所有步長調節器的通用的功能抽象出了一個父類。雖然QAbstractSpinBox是一個抽象類,但是可以直接實例化使用。QAbstractSpinBox包含了一個QLineEdit和兩個QPushbutton。數據的更改可以通過點擊按鈕或使用鍵盤輸入。
由于QAbstractSpinBox是個基類,沒有對按鈕的事件進行定義,控件中的按鈕點擊是沒有效果的,想要有效果需要對類進行重寫
from PyQt5.Qt import * import sys class MyASB(QAbstractSpinBox):def stepEnabled(self):current = int(self.text())if current == 0:return QAbstractSpinBox.StepUpEnabledelif current == 9999:return QAbstractSpinBox.StepDownEnabledelif current<0 or current>9999:return QAbstractSpinBox.StepNoneelse:return QAbstractSpinBox.StepUpEnabled| QAbstractSpinBox.StepDownEnableddef stepBy(self, steps: int):current =int(self.text())self.lineEdit().setText(str(steps+current)) class Window(QWidget):def __init__(self):super().__init__()self.UI_test()def UI_test(self):asb = MyASB(self)asb.move(100,100)asb.resize(200,40)asb.setAccelerated(True)pass if __name__ == '__main__':app = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_()) QAbstractSpinBox的子類化使用模擬這樣就能實現用按鈕在0-9999之間加減,超出范圍是沒有效果的
在后面的演示中為了方便我們都用上面的子類來演示(數值變化范圍0-9999)。
1.長按按鈕累計加速
在默認情況下使用按鈕對數據進行累計時數據是勻速變化的,還可以使它加速變化
QAbstractSpinBox.setAccelerated(True) QAbstractSpinBox.isAccelerated()2.只讀設置
這個只讀是用戶不能使用鍵盤輸入數據,但是可以用鼠標點擊按鈕來實現數據的更改。
QAbstractSpinBox.setReadOnly(True) QAbstractSpinBox.isReadOnly()?3.內容設置和獲取
QAbstractSpinBox里面包含了一個QLineEdit控件,可以直接獲取這個LineEdit對象
QAbstractSpinBox.lineEdit()這樣就可以用QLineEdit里的方法對數據進行獲取或修改
QAbstractSpinBox.lineEdit().setText('str') QAbstractSpinBox.lineEdit().text()其實QLineEdit里的很多功能(對齊、自動填充、驗證器)都可以使用
但是因為我們常常需要從控件中獲取數據,QAbstractSpinBox給我們留了一個直接的API
QAbstractSpinBox.text()可以直接獲取數據。
4.對齊方式
QAbstractSpinBox.setAlignment(Qt.AlignCenter) AlignLeft = ... # type: 'Qt.AlignmentFlag' AlignLeading = ... # type: 'Qt.AlignmentFlag' AlignRight = ... # type: 'Qt.AlignmentFlag' AlignTrailing = ... # type: 'Qt.AlignmentFlag' AlignHCenter = ... # type: 'Qt.AlignmentFlag' AlignJustify = ... # type: 'Qt.AlignmentFlag' AlignAbsolute = ... # type: 'Qt.AlignmentFlag' AlignHorizontal_Mask = ... # type: 'Qt.AlignmentFlag' AlignTop = ... # type: 'Qt.AlignmentFlag' AlignBottom = ... # type: 'Qt.AlignmentFlag' AlignVCenter = ... # type: 'Qt.AlignmentFlag' AlignVertical_Mask = ... # type: 'Qt.AlignmentFlag' AlignCenter = ... # type: 'Qt.AlignmentFlag' AlignBaseline = ... # type: 'Qt.AlignmentFlag' 對齊枚舉值5.邊框顯示
QAbstractSpinBox控件默認有邊框的
右邊的圖就是默認情況,帶有邊框,也可以不顯示邊框
QAbstractSpinBox.setFrame(False)6.按鈕的樣式
還可以對按鈕的樣式進行修改
QAbstractSpinBox.setButtonSymbols(QAbstractSpinBox.NoButtons) UpDownArrows = ... # type: 'QAbstractSpinBox.ButtonSymbols' PlusMinus = ... # type: 'QAbstractSpinBox.ButtonSymbols' NoButtons = ... # type: 'QAbstractSpinBox.ButtonSymbols' 按鈕樣式枚舉值枚舉值中有個加減效果,但是我沒試出來,不顯示倒是可以的。
這里有個小技巧:如果不顯示按鈕,卻又設置了只讀模式,那么數據還能改么?可以的!在獲取焦點后可以用鍵盤上下鍵來修改數據
7.內容驗證
首先我們可以用QLineEdit來實現數據的驗證,在這里我們講是QAbstractSpinBox直接給出的API。
其實在一開始的案例我們就定義了一個驗證器:數小于0或大于9999時再點擊就沒效果了,但是這僅限于用鼠標點擊增減按鈕。可以如果我不用鼠標,用鍵盤輸入數據時是不調用這個方法了,那是不是就失效了!那就需要另外的方法了!但是試驗是失敗的,回來捋清楚了再說吧
8。信號
只有一個信號要講
QAbstractSpinBox.editingFinished()其實就是結束了編輯:按下Enter鍵、切換焦點、點擊右鍵,關閉程序
轉載于:https://www.cnblogs.com/yinsedeyinse/p/10875067.html
總結
以上是生活随笔為你收集整理的GUI学习之十四——QAbstractSpinBox学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx 日志配置log_format
- 下一篇: 生活点滴:java基础知识细化