GUI学习之十五——QAbstractSpinBox学习总结
QAbstractSpinBox是一个抽象类,是将所有步长调节器的通用的功能抽象出了一个父类。虽然QAbstractSpinBox是一个抽象类,但是可以直接实例化使用。QAbstractSpinBox包含了一个QLineEdit和两个QPushbutton。数据的更改可以通过点击按钮或使用键盘输入。

由于QAbstractSpinBox是个基类,没有对按钮的事件进行定义,控件中的按钮点击是没有效果的,想要有效果需要对类进行重写
from PyQt5.Qt import *
import sys
class MyASB(QAbstractSpinBox):
def stepEnabled(self):
current = int(self.text())
if current == 0:
return QAbstractSpinBox.StepUpEnabled
elif current == 9999:
return QAbstractSpinBox.StepDownEnabled
elif current<0 or current>9999:
return QAbstractSpinBox.StepNone
else:
return QAbstractSpinBox.StepUpEnabled| QAbstractSpinBox.StepDownEnabled def stepBy(self, steps: int):
current =int(self.text())
self.lineEdit().setText(str(steps+current))
class Window(QWidget):
def __init__(self):
super().__init__()
self.UI_test() def UI_test(self):
asb = MyASB(self)
asb.move(100,100)
asb.resize(200,40)
asb.setAccelerated(True)
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
QAbstractSpinBox的子类化使用模拟
这样就能实现用按钮在0-9999之间加减,超出范围是没有效果的
在后面的演示中为了方便我们都用上面的子类来演示(数值变化范围0-9999)。
1.长按按钮累计加速
在默认情况下使用按钮对数据进行累计时数据是匀速变化的,还可以使它加速变化
QAbstractSpinBox.setAccelerated(True)
QAbstractSpinBox.isAccelerated()
2.只读设置
这个只读是用户不能使用键盘输入数据,但是可以用鼠标点击按钮来实现数据的更改。
QAbstractSpinBox.setReadOnly(True)
QAbstractSpinBox.isReadOnly()
3.内容设置和获取
QAbstractSpinBox里面包含了一个QLineEdit控件,可以直接获取这个LineEdit对象
QAbstractSpinBox.lineEdit()
这样就可以用QLineEdit里的方法对数据进行获取或修改
QAbstractSpinBox.lineEdit().setText('str')
QAbstractSpinBox.lineEdit().text()
其实QLineEdit里的很多功能(对齐、自动填充、验证器)都可以使用
但是因为我们常常需要从控件中获取数据,QAbstractSpinBox给我们留了一个直接的API
QAbstractSpinBox.text()
可以直接获取数据。
4.对齐方式
QAbstractSpinBox.setAlignment(Qt.AlignCenter)
AlignLeft = ... # type: 'Qt.AlignmentFlag'
AlignLeading = ... # type: 'Qt.AlignmentFlag'
AlignRight = ... # type: 'Qt.AlignmentFlag'
AlignTrailing = ... # type: 'Qt.AlignmentFlag'
AlignHCenter = ... # type: 'Qt.AlignmentFlag'
AlignJustify = ... # type: 'Qt.AlignmentFlag'
AlignAbsolute = ... # type: 'Qt.AlignmentFlag'
AlignHorizontal_Mask = ... # type: 'Qt.AlignmentFlag'
AlignTop = ... # type: 'Qt.AlignmentFlag'
AlignBottom = ... # type: 'Qt.AlignmentFlag'
AlignVCenter = ... # type: 'Qt.AlignmentFlag'
AlignVertical_Mask = ... # type: 'Qt.AlignmentFlag'
AlignCenter = ... # type: 'Qt.AlignmentFlag'
AlignBaseline = ... # type: 'Qt.AlignmentFlag'
对齐枚举值
5.边框显示
QAbstractSpinBox控件默认有边框的

右边的图就是默认情况,带有边框,也可以不显示边框
QAbstractSpinBox.setFrame(False)
6.按钮的样式
还可以对按钮的样式进行修改
QAbstractSpinBox.setButtonSymbols(QAbstractSpinBox.NoButtons)
UpDownArrows = ... # type: 'QAbstractSpinBox.ButtonSymbols'
PlusMinus = ... # type: 'QAbstractSpinBox.ButtonSymbols'
NoButtons = ... # type: 'QAbstractSpinBox.ButtonSymbols'
按钮样式枚举值
枚举值中有个加减效果,但是我没试出来,不显示倒是可以的。
这里有个小技巧:如果不显示按钮,却又设置了只读模式,那么数据还能改么?可以的!在获取焦点后可以用键盘上下键来修改数据
7.内容验证
首先我们可以用QLineEdit来实现数据的验证,在这里我们讲是QAbstractSpinBox直接给出的API。
其实在一开始的案例我们就定义了一个验证器:数小于0或大于9999时再点击就没效果了,但是这仅限于用鼠标点击增减按钮。可以如果我不用鼠标,用键盘输入数据时是不调用这个方法了,那是不是就失效了!那就需要另外的方法了!但是试验是失败的,回来捋清楚了再说吧
8。信号
只有一个信号要讲
QAbstractSpinBox.editingFinished()
其实就是结束了编辑:按下Enter键、切换焦点、点击右键,关闭程序
GUI学习之十五——QAbstractSpinBox学习总结的更多相关文章
- 201771010134杨其菊《面向对象程序设计(java)》第十五周学习
第十五周学习总结 第一部分:理论知识 JAR文件: 应用程序首选项存储: Java Web Start JAR文件: 1.Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第十五周
java学习第十五周 Java的GUI界面设计,框架以及主要部件填充,归置,布局管理,在第十一章和第十二章进行了系统的学习,在这两章的知识奠基下,可以简单的构造一个GUI用户界面,在两周的学习后,可以 ...
- 201271050130-滕江南-《面向对象程序设计(java)》第十五周学习总结
201271050130-滕江南-<面向对象程序设计(java)>第十五周学习总结 博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.c ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十五周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第十五周学习总结 实验十三 Swing图形界面组件(二) 实验时间 2019-12-6 第一部分:理论知识总结 5> ...
- 201871010123-吴丽丽《面向对象程序设计(Java)》第十五周学习总结
201871010123-吴丽丽<面向对象程序设计(Java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 201871010104-陈园园 《面向对象程序设计(java)》第十五周学习总结
201871010104-陈园园 <面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 201871010105-曹玉中《面向对象程序设计(java)》第十五周学习总结
201871010105-曹玉中<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个过程 https://www.cnblogs.com/nwnu-daizh/ ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第十五周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第十五周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nw ...
- 201871010107-公海瑜《面向对象程序设计(java)》第十五周学习总结
201871010107-公海瑜<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于 ...
随机推荐
- eigen 四元数进行坐标旋转
(<视觉SLAM十四讲>第三讲习题7)设有小萝卜一号和二号在世界坐标系中.一号位姿q1 = [0.35, 0.2, 0.3, 0.1],t1=[0.3, 0.1, 0.1].二号位姿q2= ...
- lnmp源码搭建
Nginx工作原理 这里需要结合Apache的工作,对PHP文件处理过程的区别 1:Nginx是通过php-fpm这个服务来处理php文件 2:Apache是通过libphp5.so ...
- org.hibernate.AssertionFailure: null id don't flus
我的是字段编码和数据库不匹配,是爬的微博数据
- wpf进程间通讯
wpf进程间通讯 在联想智能识别项目中,需要用到进程间通讯,并且是低权限向高权限发送消息.首先声明一下,此项目是wpf的. 首先先简要说一下什么时候会用到进程间通讯,如:在Windows程序中,各个进 ...
- Python Module_openpyxl_处理Excel表格
目录 目录 前言 软件系统 Install openpyxl module Sample code load_workbook加载Excel文件 wbObjectget_sheet_names 获取E ...
- 【工具安装】MAC 安装 netdiscover 使用教程
日期:2019-06-27 15:54:19 作者:Bay0net 介绍:在 mac os 下,如何安装 netdiscover 及基本使用方法 0x01.当前环境 MAC os 10.14.4 已安 ...
- multiple datasource config
Hi Harshit S. project structure: multiple datasource config as follows: step 1: step 2:add a datasou ...
- 第十届山东省acm省赛补题(2)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4124 L Median Time Limit: 1 Second ...
- [DS+Algo] 004 栈、队列及其代码实现
1. Stack FILO (FirstInLastOut) 的链表结构 在程序编译环境上使用较多 常用操作 push pop peek is_empty size Python 代码示例 class ...
- 将从model中获得的数据传到js函数中
刚遇到了一种情况,从controller中获得的model是一个集合,需要将这个集合循环放到标签中,并且需要为这些标签添加点击事件,每个值传入对应的点击事件函数中,由于model中的值是通过${ite ...