文章目录
2、 输入控件(二)
2.2 步长调节
简介:
- 步长调节,QAbstractSpinBox,键盘加鼠标都可以操作
2.2.1 QAbstractSpinBox
2.2.1.1 描述
其是一个由步长调节器和单行文本框来调节和显示数据
继承自 QWidget
其实例化后无法通过鼠标来调节步长,只有通过方法重写来实现
2.2.1.2 功能作用
2.2.1.2.1 使用
-
子类化此对象
-
实现控制上下能用的方法
# 重写方法 stepEnabled()
QAbstractSpinBox.StepEnabled
:QAbstractSpinBox.StepNone
:都不能使用QAbstractSpinBox.StepUpEnabled
:只有向上可用QAbstractSpinBox.StepDownEnabled
:只有向下可用
-
实现步长调整方法
stepBy(p_int)
-
示例
#!/usr/bin/env python # -*- coding: UTF-8 -*- # @author: kun from PyQt5.Qt import * import sys class MyQAbstractSpinBox(QAbstractSpinBox): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.lineEdit().setText("0") # 设置默认值为0 def stepEnabled(self): # 比如限定数据只能0~9,当数据等于0是,只能向上调节,当数据等于9时,数据只能向下调节 if int(self.text()) == 0: return QAbstractSpinBox.StepUpEnabled if int(self.text()) == 9: return QAbstractSpinBox.StepDownEnabled if 0 <= int(self.text()) <= 9: return QAbstractSpinBox.StepDownEnabled | QAbstractSpinBox.StepUpEnabled return QAbstractSpinBox.StepNone def stepBy(self, p_int): # p_int 为 1 向上 或 -1 向下 print(p_int) self.lineEdit().setText(str(int(self.text()) + p_int)) # 通过拿到左边的单行文本编辑器来编辑文本内容,设置每次点击一次增加1 app = QApplication(sys.argv) w = QWidget() w.resize(500, 500) qa = MyQAbstractSpinBox(w) # 创建对象 qa.resize(100, 30) qa.move(100, 100) w.show() sys.exit(app.exec_())
2.2.1.2.2 主要功能
-
长按调整步长加快频率
#!/usr/bin/env python # -*- coding: UTF-8 -*- # @author: kun from PyQt5.Qt import * import sys class MyQAbstractSpinBox(QAbstractSpinBox): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.lineEdit().setText("0") def stepEnabled(self): return QAbstractSpinBox.StepDownEnabled | QAbstractSpinBox.StepUpEnabled def stepBy(self, p_int): self.lineEdit().setText(str(int(self.text()) + p_int)) app = QApplication(sys.argv) w = QWidget() w.resize(500, 500) qa = MyQAbstractSpinBox(w) qa.setAccelerated(True) # 开启长按加速的功能 print(qa.isAccelerated()) # 判断是否开启加速功能 qa.resize(100, 30) qa.move(100, 100) w.show() sys.exit(app.exec_())
控制用户长按按钮后,内容调整的频率
-
只读限制
#!/usr/bin/env python # -*- coding: UTF-8 -*- # @author: kun from PyQt5.Qt import * import sys class MyQAbstractSpinBox(QAbstractSpinBox): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.lineEdit().setText("0") def stepEnabled(self): return QAbstractSpinBox.StepDownEnabled | QAbstractSpinBox.StepUpEnabled def stepBy(self, p_int): self.lineEdit().setText(str(int(self.text()) + p_int)) app = QApplication(sys.argv) w = QWidget() w.resize(500, 500) qa = MyQAbstractSpinBox(w) qa.setReadOnly(True) # 设置只读限制,只能通过按钮修改值,不能通过键盘键入数值 print(qa.isReadOnly()) # 判断是否开启只读限制 qa.resize(100, 30) qa.move(100, 100) w.show() sys.exit(app.exec_())
-
设置及获取内容
text() # 获取文本框,里面的内容 lineEdit() # 拿到左边单行文本框对象,可以对内容进行设置和获取 # 设置文本框内容 lineEdit().setText(str) # 获取文本框内容 lineEdit().text()
QLineEdit
:里面的大部分方法都可以在这里使用 -
设置对齐方式
qa.setAlignment(Qt.Alignment) # 设置文本的对齐方式 qa.alignment() # 获取文本的对齐方式
-
设置周边框架
qa.setFrame(False) # 设置周边框架,默认有边框 print(qa.hasFrame()) # 查看是否有框架 qa.clear() # 清空文本框内的文本内容
-
设置按钮样式
setButtonSymbols(QAbstractSpinBox.ButtonSymbols) # 设置按钮样式 buttonSymbols() # 获得按钮样式
2.2.1.2.3 内容验证
2.2.1.2.3.1 语法
其在输入内容时进行验证
validate(p_str, p_int)
:验证规则fixup(p_str)
:恢复方法
具体内容:点我
2.2.1.2.3.2 案例
验证通过 18 ~ 180 的数据,超过部分设置为最近的最值
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
class MyQAbstractSpinBox(QAbstractSpinBox):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.lineEdit().setText("18")
def stepEnabled(self):
if int(self.text()) == 18:
return QAbstractSpinBox.StepUpEnabled
if int(self.text()) == 180:
return QAbstractSpinBox.StepDownEnabled
if 18 < int(self.text()) < 180:
return QAbstractSpinBox.StepDownEnabled | QAbstractSpinBox.StepUpEnabled
def stepBy(self, p_int):
self.lineEdit().setText(str(int(self.text()) + p_int))
def validate(self