日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GUI学习之十四——QAbstractSpinBox学习总结

發布時間:2025/4/16 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。