7.1 QAbstractSpinBox步长调节器基类
一、QAbstractSpinBox步长调节器基类
1.基本概念
*QAbstractSpinBox是步长调节器的基类,这个也是一个抽象类,不能直接实例化.
*在使用QAbstractSpinBox之前先要子类化,或者直接使用子类来创建对象。
*本章概要
'''
1.了解QAbstractSpinBox基类和三种步长调节器:整形、浮点型、时间
# QSpinBox
# QDoubleSpinBox
# QDateTimeEdit
2.子类化步长调节器
3.长按累加加速功能
4.只读设置,志云与步长调节器来改变内容
5.设置和获取步长调节器来改变内容
6.对齐方式
7.设置周边框架
8.清空文本框内容
9.设置上下键样式
'''
2.代码:
点击查看代码
from PyQt5.Qt import *
import sys
# 2.子类化、实现控制方法,实现步长调节
class Sun_asb(QAbstractSpinBox) :
def __init__(self, *args, **kwargs) :
super().__init__(*args, **kwargs)
self.lineEdit().setText('0') # 设置一个默认值,作为容错 用在测试4里面
# 来判断上下是否有效
def stepEnabled(self) :
num = int(self.text()) #获取对应的值,将字符串转化为整形
if num == 0 :
return QAbstractSpinBox.StepUpEnabled #向上调节
elif num == 9 :
return QAbstractSpinBox.StepDownEnabled #向下调节
elif num < 0 or num > 9 :
return QAbstractSpinBox.StepNone #范围之外,不能调节
else :
return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled # 在0-9之间可以调节向上和向下
#测试3步长加速器的时候,只留下return,调节位置,注释if-else,内容就会增加/减少的越来越快
# 设置步长
def stepBy(self, r_int) :
# print(r_int)
num = int(self.text()) + r_int * 1 # 获取步长加上原有的数值 注意不要超过可调节的有效范围 0~9
self.lineEdit().setText(str(num))
# self没有setText方法,所以要使用lineEdit来处理,因为self是一个组合控件,其中包含一个单行文本编辑器,这里的数值是直接插入单行文本编辑器中的,所以借助QLineEdit
#文本内容验证
def validate(self, a_str, a_int) :
num = int(a_str)
if num < 18 :
return (QValidator.Intermediate, a_str, a_int)
elif num <= 180 :
return (QValidator.Acceptable, a_str, a_int)
else :
return (QValidator.Invalid, a_str, a_int)
def fixup(self, a_str) :
return '18'
class Window(QWidget) :
def __init__(self) :
super().__init__()
self.setWindowTitle("QAbstractSpinBox步长调节器抽象基类 - PyQt5中文网")
self.resize(600, 500)
self.func_list()
def func_list(self) :
self.func()
def func(self) :
# 1.三种步长调节器:整形、浮点型、时间
# QSpinBox
# QDoubleSpinBox
# QDateTimeEdit
self.asb = Sun_asb(self)
self.asb.resize(100, 30)
self.asb.move(200, 50)
# # 3.加速调节步长:增加/减少的数值会越来越快
# self.asb.setAccelerated(True) #需要把设置步长的注释掉才能测试
# 4.只读设置,只允许步长调节器来改变内容
#self.asb.setReadOnly(True)
# 5.设置和获取步长调节器中的文本内容
self.btn = QPushButton(self)
self.btn.move(200, 100)
self.btn.setText('按 钮')
self.btn.pressed.connect(self.pre_btn)#连接槽函数
#5的槽函数
def pre_btn(self) :
print(self.asb.text()) #获取内容
# self.asb.lineEdit().setText('55')
self.asb.lineEdit().setToolTip('获取数据')#设置内容
# # 6.对齐方式:内容会右对齐
# self.asb.setAlignment(Qt.AlignRight)
# 7.设置周边框架
print(self.asb.hasFrame())
self.asb.setFrame(False)#文本框的边消失了
# # 8.清空文本框内容
# self.asb.clear()
# 9.设置上下键样式
# QAbstractSpinBox.NoButtons #没有按钮
# QAbstractSpinBox.UpDownArrows #通过箭头控制步长
# QAbstractSpinBox.PlusMinus #通过加减号控制步长
self.asb.setButtonSymbols(QAbstractSpinBox.UpDownArrows)
# # 文本内容验证
# # 在上面的类中写 validate()
# 10.可用信号
self.asb.editingFinished.connect(lambda : print(123)) # 结束编辑时调用
if __name__ == '__main__' :
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
分类:
可视化界面 / PYQT5
标签:
python可视化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构