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.StepUpEnabled
        elif current == 9999:
            return QAbstractSpinBox.StepDownEnabled
        elif current<0 or current>9999:
            return QAbstractSpinBox.StepNone
        else:
            return QAbstractSpinBox.StepUpEnabled| QAbstractSpinBox.StepDownEnabled

    def 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鍵、切換焦點、點擊右鍵,關閉程序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM