7.1 QAbstractSpinBox步长调节器基类

一、QAbstractSpinBox步长调节器基类

1.基本概念

*QAbstractSpinBox是步长调节器的基类,这个也是一个抽象类,不能直接实例化.
*在使用QAbstractSpinBox之前先要子类化,或者直接使用子类来创建对象。
*本章概要

'''
1.了解QAbstractSpinBox基类和三种步长调节器:整形、浮点型、时间
# QSpinBox
# QDoubleSpinBox
# QDateTimeEdit

2.子类化步长调节器
3.长按累加加速功能
4.只读设置,志云与步长调节器来改变内容
5.设置和获取步长调节器来改变内容
6.对齐方式
7.设置周边框架
8.清空文本框内容
9.设置上下键样式
'''

2.代码:

点击查看代码
from PyQt5.Qt import *
import sys

# 2.子类化、实现控制方法,实现步长调节
class Sun_asb(QAbstractSpinBox) :
    def __init__(self, *args, **kwargs) :
        super().__init__(*args, **kwargs)
        self.lineEdit().setText('0')  # 设置一个默认值,作为容错 用在测试4里面

    # 来判断上下是否有效
    def stepEnabled(self) :
        num = int(self.text()) #获取对应的值,将字符串转化为整形
        if num == 0 :
            return QAbstractSpinBox.StepUpEnabled #向上调节
        elif num == 9 :
            return QAbstractSpinBox.StepDownEnabled #向下调节
        elif num < 0 or num > 9 :
            return QAbstractSpinBox.StepNone #范围之外,不能调节
        else :
            return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled # 在0-9之间可以调节向上和向下
        #测试3步长加速器的时候,只留下return,调节位置,注释if-else,内容就会增加/减少的越来越快

    # 设置步长
    def stepBy(self, r_int) :
        # print(r_int)
        num = int(self.text()) + r_int * 1  # 获取步长加上原有的数值 注意不要超过可调节的有效范围 0~9
        self.lineEdit().setText(str(num))
        # self没有setText方法,所以要使用lineEdit来处理,因为self是一个组合控件,其中包含一个单行文本编辑器,这里的数值是直接插入单行文本编辑器中的,所以借助QLineEdit

    #文本内容验证
    def validate(self, a_str, a_int) :
        num = int(a_str)
        if num < 18 :
            return (QValidator.Intermediate, a_str, a_int)
        elif num <= 180 :
            return (QValidator.Acceptable, a_str, a_int)
        else :
            return (QValidator.Invalid, a_str, a_int)

    def fixup(self, a_str) :
        return '18'


class Window(QWidget) :
    def __init__(self) :
        super().__init__()
        self.setWindowTitle("QAbstractSpinBox步长调节器抽象基类 - PyQt5中文网")
        self.resize(600, 500)
        self.func_list()

    def func_list(self) :
        self.func()

    def func(self) :
        # 1.三种步长调节器:整形、浮点型、时间
        # QSpinBox
        # QDoubleSpinBox
        # QDateTimeEdit
        self.asb = Sun_asb(self)
        self.asb.resize(100, 30)
        self.asb.move(200, 50)


        # # 3.加速调节步长:增加/减少的数值会越来越快
        # self.asb.setAccelerated(True)  #需要把设置步长的注释掉才能测试

        # 4.只读设置,只允许步长调节器来改变内容
        #self.asb.setReadOnly(True)

        # 5.设置和获取步长调节器中的文本内容
        self.btn = QPushButton(self)
        self.btn.move(200, 100)
        self.btn.setText('按 钮')

        self.btn.pressed.connect(self.pre_btn)#连接槽函数
    #5的槽函数
    def pre_btn(self) :
        print(self.asb.text()) #获取内容
        # self.asb.lineEdit().setText('55')
        self.asb.lineEdit().setToolTip('获取数据')#设置内容

        # # 6.对齐方式:内容会右对齐
        # self.asb.setAlignment(Qt.AlignRight)

        # 7.设置周边框架
        print(self.asb.hasFrame())
        self.asb.setFrame(False)#文本框的边消失了

        # # 8.清空文本框内容
        # self.asb.clear()

        # 9.设置上下键样式
        # QAbstractSpinBox.NoButtons #没有按钮
        # QAbstractSpinBox.UpDownArrows #通过箭头控制步长
        # QAbstractSpinBox.PlusMinus #通过加减号控制步长
        self.asb.setButtonSymbols(QAbstractSpinBox.UpDownArrows)

        # # 文本内容验证
        # # 在上面的类中写 validate()
        
        # 10.可用信号
        self.asb.editingFinished.connect(lambda : print(123))  # 结束编辑时调用


if __name__ == '__main__' :
    app = QApplication(sys.argv)
    window = Window()

    window.show()
    sys.exit(app.exec_())
posted @   Trouvaille_fighting  阅读(111)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示

目录导航