GUI学习之十四——QAbstractSpinBox学习总结
QAbstractSpinBox是一個(gè)抽象類,是將所有步長調(diào)節(jié)器的通用的功能抽象出了一個(gè)父類。雖然QAbstractSpinBox是一個(gè)抽象類,但是可以直接實(shí)例化使用。QAbstractSpinBox包含了一個(gè)QLineEdit和兩個(gè)QPushbutton。數(shù)據(jù)的更改可以通過點(diǎn)擊按鈕或使用鍵盤輸入。
由于QAbstractSpinBox是個(gè)基類,沒有對(duì)按鈕的事件進(jìn)行定義,控件中的按鈕點(diǎn)擊是沒有效果的,想要有效果需要對(duì)類進(jìn)行重寫
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的子類化使用模擬這樣就能實(shí)現(xiàn)用按鈕在0-9999之間加減,超出范圍是沒有效果的
在后面的演示中為了方便我們都用上面的子類來演示(數(shù)值變化范圍0-9999)。
1.長按按鈕累計(jì)加速
在默認(rèn)情況下使用按鈕對(duì)數(shù)據(jù)進(jìn)行累計(jì)時(shí)數(shù)據(jù)是勻速變化的,還可以使它加速變化
QAbstractSpinBox.setAccelerated(True) QAbstractSpinBox.isAccelerated()2.只讀設(shè)置
這個(gè)只讀是用戶不能使用鍵盤輸入數(shù)據(jù),但是可以用鼠標(biāo)點(diǎn)擊按鈕來實(shí)現(xiàn)數(shù)據(jù)的更改。
QAbstractSpinBox.setReadOnly(True) QAbstractSpinBox.isReadOnly()?3.內(nèi)容設(shè)置和獲取
QAbstractSpinBox里面包含了一個(gè)QLineEdit控件,可以直接獲取這個(gè)LineEdit對(duì)象
QAbstractSpinBox.lineEdit()這樣就可以用QLineEdit里的方法對(duì)數(shù)據(jù)進(jìn)行獲取或修改
QAbstractSpinBox.lineEdit().setText('str') QAbstractSpinBox.lineEdit().text()其實(shí)QLineEdit里的很多功能(對(duì)齊、自動(dòng)填充、驗(yàn)證器)都可以使用
但是因?yàn)槲覀兂3P枰獜目丶蝎@取數(shù)據(jù),QAbstractSpinBox給我們留了一個(gè)直接的API
QAbstractSpinBox.text()可以直接獲取數(shù)據(jù)。
4.對(duì)齊方式
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' 對(duì)齊枚舉值5.邊框顯示
QAbstractSpinBox控件默認(rèn)有邊框的
右邊的圖就是默認(rèn)情況,帶有邊框,也可以不顯示邊框
QAbstractSpinBox.setFrame(False)6.按鈕的樣式
還可以對(duì)按鈕的樣式進(jìn)行修改
QAbstractSpinBox.setButtonSymbols(QAbstractSpinBox.NoButtons) UpDownArrows = ... # type: 'QAbstractSpinBox.ButtonSymbols' PlusMinus = ... # type: 'QAbstractSpinBox.ButtonSymbols' NoButtons = ... # type: 'QAbstractSpinBox.ButtonSymbols' 按鈕樣式枚舉值枚舉值中有個(gè)加減效果,但是我沒試出來,不顯示倒是可以的。
這里有個(gè)小技巧:如果不顯示按鈕,卻又設(shè)置了只讀模式,那么數(shù)據(jù)還能改么?可以的!在獲取焦點(diǎn)后可以用鍵盤上下鍵來修改數(shù)據(jù)
7.內(nèi)容驗(yàn)證
首先我們可以用QLineEdit來實(shí)現(xiàn)數(shù)據(jù)的驗(yàn)證,在這里我們講是QAbstractSpinBox直接給出的API。
其實(shí)在一開始的案例我們就定義了一個(gè)驗(yàn)證器:數(shù)小于0或大于9999時(shí)再點(diǎn)擊就沒效果了,但是這僅限于用鼠標(biāo)點(diǎn)擊增減按鈕。可以如果我不用鼠標(biāo),用鍵盤輸入數(shù)據(jù)時(shí)是不調(diào)用這個(gè)方法了,那是不是就失效了!那就需要另外的方法了!但是試驗(yàn)是失敗的,回來捋清楚了再說吧
8。信號(hào)
只有一個(gè)信號(hào)要講
QAbstractSpinBox.editingFinished()其實(shí)就是結(jié)束了編輯:按下Enter鍵、切換焦點(diǎn)、點(diǎn)擊右鍵,關(guān)閉程序
轉(zhuǎn)載于:https://www.cnblogs.com/yinsedeyinse/p/10875067.html
總結(jié)
以上是生活随笔為你收集整理的GUI学习之十四——QAbstractSpinBox学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx 日志配置log_format
- 下一篇: 生活点滴:java基础知识细化