当前位置:网站首页>【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_())
心得体会:
代码的使用,必须要多练习,勤于动手,才能对使用代码过程中产生的问题有深入的思考
代码使用过程中,出现问题,及时搜索找到答案才能在以后避免重新犯错,代码的学习是一个不断纠错的循序的过程,有时一个错误往往要浪费很久的时间才能找到,但是这时间花的是有价值的,可能你找到问题后,会有一种刻骨铭心的记忆,类似错误不会再犯,类似不懂的问题一下子全部了解了,祝大家学习开心!
边栏推荐
- MySQL summary
- 100 GIS practical application cases (79) - key points of making multi plan integrated base map
- Nacos adapts to oracle11g- modify the source code of Nacos
- codeforce 158B Taxi
- 微信多人聊天及轮盘小游戏(websocket实现)
- Advanced drawing skills of Excel lecture 100 (VIII) -excel drawing WiFi diagram
- Spock sub piling
- Flannel 工作原理
- Specific help of OSI layered model to work
- 启发式的搜索策略
猜你喜欢

Deeplab V3 code structure diagram

Learning and using quartz scheduling framework

MySQL (11) - sorting out MySQL interview questions

GloRe

Regular expression graph and text ultra detailed summary without rote memorization (Part 1)

deeplab v3 代码结构图

MySQL(八) — 执行计划(Explain)详解

微信多人聊天及轮盘小游戏(websocket实现)

Solutions to abnormal network connection of Xiaoai speakers

junit单元测试报错org.junit.runners.model.InvalidTestClassError: Invalid test class ‘xxx‘ .No runnable meth
随机推荐
312. poke the balloon
301. delete invalid brackets
npm下载报错npm ERR code ERESOLVE
MySQL (11) - sorting out MySQL interview questions
【AI实战】机器学习数据处理之数据归一化、标准化
Regular expression graph and text ultra detailed summary without rote memorization (Part 1)
Nacos适配oracle11g-修改Nacos源码
How to verify date format in PHP (regular)
paddle版本问题
UNET code implementation
Akamai-1.75版本-_abck参数生成-js逆向分析
901. stock price span
[game theory] basic knowledge
303. region and retrieval - array immutable
PSP code implementation
MySQL Niuke brush questions
【2022毕业季】从毕业到转入职场
306. Addenda
NTU-RGBD数据集下载及数据格式解析
MYSQL牛客刷题