当前位置:网站首页>【PyQt5系列】修改计数器实现控制

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

2022-06-23 06:36:00 德天老师

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

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

原网站

版权声明
本文为[德天老师]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_41704077/article/details/125419703