zoukankan      html  css  js  c++  java
  • 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键、切换焦点、点击右键,关闭程序

  • 相关阅读:
    Hackerrank alien-flowers(数学公式)
    Hackerrank manasa-and-combinatorics(数学推导)
    Codeforces 314B(倍增)
    Codeforces Round #403(div 2)
    Mutual Training for Wannafly Union #6
    几道splay
    高数(A)下 第十章
    Bestcoder #92
    codevs1700 施工方案第二季
    poj2631
  • 原文地址:https://www.cnblogs.com/yinsedeyinse/p/10875067.html
Copyright © 2011-2022 走看看