• 【PyQt5系列】修改计数器实现控制


    Qt5—计数器的调节

    好久没有发文,最近一直学习PyQt5中,特别把学习心得反馈给大家一起交流共同成长
    以下为源代码,已附注释。

    import sys
    from PyQt5.QtWidgets import *
    
    '''
    通过设置计数器上的数据,从而实现当计数器为0时,向上增加有效,计数器是9时,向下减少有效,否则计数器返回空值。
    并通过MyASB类内部方法stepBy,返回结果p_int输出。
    '''
    
    
    class MyASB(QAbstractSpinBox):
        #因为MyASB是从计数器的父类继承的,所以以下self全部虚指‘计数器’
        #这里parent=None是定义父类方法可以为None
        #这里num=0是定义一个初始值,如果调用时没有给num传值,系统自动调用0
        def __init__(self,parent=None,num=0,*args,**kwargs):
            #注此处parent不能等于None,因为这里是调用父类方法不是定义方法
            super().__init__(parent,*args,**kwargs)
            #这里lineEdit()是计数器的组合控件-行编辑,用来显示数据
            self.lineEdit().setText(str(num))
    
        def stepEnabled(self): #先执行获取p_int值,供后面stepBy()方法使用
            #此处current_num用来接收来自计数器的文本,转成int传递,实现if判断
            current_num = int(self.text())
    
            if int(self.text()) == 0:
                return QAbstractSpinBox.StepUpEnabled  # 向上点击按钮有效
            elif current_num == 9:
                return QAbstractSpinBox.StepDownEnabled #向下点击按钮有效
            elif current_num < 0 or current_num > 9: #向上向下点击无效,此处值传递p_int
                return QAbstractSpinBox.StepNone
            else:
                #向上和向下都能有效使用
                return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled
    
        #p_int:随着向上点击,值增加1,向下点击值-1,接收鼠标的点击值
        def stepBy(self, p_int):
            #int(self.text())---指把获取的计数文本转为整型数据与原数据相加,实现累积增加效果
            #p_int指步长值
            print(p_int)
            current_num = int(self.text()) + p_int
            #从当前计数器组合的lineEdit调用方法setText实现修改显示数据的效果
            self.lineEdit().setText(str(current_num))
    
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            # 设置标题与初始大小
            self.setWindowTitle('求和问题')
            self.resize(500, 500)
            self.setup_ui()
        #定义计数器
        def setup_ui(self):
            #这里的self必须写,否则无法显示计数器,这里的self是MyASB继承的父对象QAbstractSpinBox
            asb = MyASB(self,9)#参数9是传给变量num的自定义数据值
            asb.resize(100,30) #计数器尺寸大小
            asb.move(50,50)#计数器位置
       
    
    
    #以下用来执行程序
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        win = Window()
        win.show()
        sys.exit(app.exec_())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    练习使用layout布局代码

    为了更好的使用布局方法,以下是对上面代码修改重新布局后的效果
    在这里插入图片描述
    源代码如下:

    import sys
    from PyQt5.QtWidgets import *
    
    '''
    通过设置计数器上的数据,从而实现当计数器为0时,向上增加有效,计数器是9时,向下减少有效,否则计数器返回空值。
    并通过MyASB类内部方法stepBy,返回结果p_int输出。
    '''
    
    
    class MyASB(QAbstractSpinBox):
        #因为MyASB是从计数器的父类继承的,所以以下self全部虚指‘计数器’
        #这里parent=None是定义父类方法可以为None
        #这里num=0是定义一个初始值,如果调用时没有给num传值,系统自动调用0
        def __init__(self,parent=None,num=0,*args,**kwargs):
            #注此处parent不能等于None,因为这里是调用父类方法不是定义方法
            super().__init__(parent,*args,**kwargs)
            #这里lineEdit()是计数器的组合控件-行编辑,用来显示数据
            self.lineEdit().setText(str(num))
    
        def stepEnabled(self): #先执行获取p_int值,供后面stepBy()方法使用
            #此处current_num用来接收来自计数器的文本,转成int传递,实现if判断
            current_num = int(self.text())
    
            if int(self.text()) == 0:
                return QAbstractSpinBox.StepUpEnabled  # 向上点击按钮有效
            elif current_num == 9:
                return QAbstractSpinBox.StepDownEnabled #向下点击按钮有效
            elif current_num < 0 or current_num > 9: #向上向下点击无效,此处值传递p_int
                return QAbstractSpinBox.StepNone
            else:
                #向上和向下都能有效使用
                return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled
    
        #p_int:随着向上点击,值增加1,向下点击值-1,接收鼠标的点击值
        def stepBy(self, p_int):
            #int(self.text())---指把获取的计数文本转为整型数据与原数据相加,实现累积增加效果
            #p_int指步长值
            print(p_int)
            current_num = int(self.text()) + p_int
            #从当前计数器组合的lineEdit调用方法setText实现修改显示数据的效果
            self.lineEdit().setText(str(current_num))
    
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            # 设置标题与初始大小
            self.setWindowTitle('计数器调节')
            self.resize(100, 50)
            layout = QVBoxLayout()
            self.label = QLabel('我的计数器',self)
            self.setup_ui()
            self.my_layout()
        #定义计数器
        def setup_ui(self):
            #这里的self必须写,否则无法显示计数器,这里的self是MyASB继承的父对象QAbstractSpinBox
            asb = MyASB(self,9)#参数9是传给变量num的自定义数据值
            self.asb = asb
            asb.resize(100,30) #计数器尺寸大小
            asb.move(50,50)#计数器位置
    
        def my_layout(self):
            layout = QVBoxLayout()
            layout.addWidget(self.label)
            layout.addWidget(self.asb)
            self.setLayout(layout)
    
    
    
    #以下用来执行程序
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        win = Window()
        win.show()
        sys.exit(app.exec_())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    心得体会:
    代码的使用,必须要多练习,勤于动手,才能对使用代码过程中产生的问题有深入的思考
    代码使用过程中,出现问题,及时搜索找到答案才能在以后避免重新犯错,代码的学习是一个不断纠错的循序的过程,有时一个错误往往要浪费很久的时间才能找到,但是这时间花的是有价值的,可能你找到问题后,会有一种刻骨铭心的记忆,类似错误不会再犯,类似不懂的问题一下子全部了解了,祝大家学习开心!

  • 相关阅读:
    Redis的缓存穿透,缓存击穿,缓存雪崩
    一致性哈希的简单认识
    python常见过滤器的整理
    分布式框架Apache Dubbo 快速入门-不古出品
    Linux下手动修改服务器时间(没网环境下)
    LVGL_基础空间圆弧arc
    数据和埋点的通俗解释
    批量清理Unity项目Library目录 降低项目空闲占用空间
    JDK新特性-Stream流
    微服务架构学习与思考(14):监控和可观测性详细介绍
  • 原文地址:https://blog.csdn.net/weixin_41704077/article/details/125419703