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

本文介绍了如何使用PyQt5创建一个限制范围的计数器,并展示了如何使用布局进行界面设计。通过自定义`MyASB`类继承`QAbstractSpinBox`,实现在计数器值为0时仅允许向上增,9时仅允许向下减,其他情况无效。同时,作者分享了未使用布局和使用布局后的代码,强调了练习和理解代码的重要性。
摘要由CSDN通过智能技术生成

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_())

练习使用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_())

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值