当前位置:网站首页>【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_())
心得体会:
代码的使用,必须要多练习,勤于动手,才能对使用代码过程中产生的问题有深入的思考
代码使用过程中,出现问题,及时搜索找到答案才能在以后避免重新犯错,代码的学习是一个不断纠错的循序的过程,有时一个错误往往要浪费很久的时间才能找到,但是这时间花的是有价值的,可能你找到问题后,会有一种刻骨铭心的记忆,类似错误不会再犯,类似不懂的问题一下子全部了解了,祝大家学习开心!
边栏推荐
- char和varchar区别
- 细说Idea那些骚操作
- Cirium has gradually become the standard for airlines' carbon dioxide emission reporting
- 【AI实战】XGBRegressor模型加速训练,使用GPU秒级训练XGBRegressor
- SimpleDateFormat 线程安全问题
- ldconfig 命令
- CIRIUM(睿思誉)逐渐成为航空公司二氧化碳排放报告的标准
- 深度学习系列46:人脸图像超分GFP-GAN
- Realization of rolling broadcast effect
- codeforce 158B Taxi
猜你喜欢
随机推荐
什么是分布式?
深度学习系列47:超分模型Real-ESRGAN
MySQL(二) — MySQL数据类型
899. ordered queue
Advanced drawing skills of Excel lecture 100 (VIII) -excel drawing WiFi diagram
Pspnet complete code implementation
GloRe
322. change exchange
301. delete invalid brackets
codeforce 158B Taxi
别找了诸位 【十二款超级好用的谷歌插件都在这】(确定不来看看?)
MySQL transaction isolation level
Cirium has gradually become the standard for airlines' carbon dioxide emission reporting
MySQL (11) - sorting out MySQL interview questions
SSM integration
MySQL(五) — 锁及事务
数据库原理实验测试题,关于图书分类表
【AI实战】XGBRegressor模型加速训练,使用GPU秒级训练XGBRegressor
MySQL (II) - MySQL data type
Unet代码实现









