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

由于QAbstractSpinBox是个基类,没有对按钮的事件进行定义,控件中的按钮点击是没有效果的,想要有效果需要对类进行重写

  1. from PyQt5.Qt import *
  2. import sys
  3. class MyASB(QAbstractSpinBox):
  4. def stepEnabled(self):
  5. current = int(self.text())
  6. if current == 0:
  7. return QAbstractSpinBox.StepUpEnabled
  8. elif current == 9999:
  9. return QAbstractSpinBox.StepDownEnabled
  10. elif current<0 or current>9999:
  11. return QAbstractSpinBox.StepNone
  12. else:
  13. return QAbstractSpinBox.StepUpEnabled| QAbstractSpinBox.StepDownEnabled
  14.  
  15. def stepBy(self, steps: int):
  16. current =int(self.text())
  17. self.lineEdit().setText(str(steps+current))
  18. class Window(QWidget):
  19. def __init__(self):
  20. super().__init__()
  21. self.UI_test()
  22.  
  23. def UI_test(self):
  24. asb = MyASB(self)
  25. asb.move(100,100)
  26. asb.resize(200,40)
  27. asb.setAccelerated(True)
  28. pass
  29. if __name__ == '__main__':
  30. app = QApplication(sys.argv)
  31. window = Window()
  32. window.show()
  33. sys.exit(app.exec_())

QAbstractSpinBox的子类化使用模拟

这样就能实现用按钮在0-9999之间加减,超出范围是没有效果的

在后面的演示中为了方便我们都用上面的子类来演示(数值变化范围0-9999)。

1.长按按钮累计加速

在默认情况下使用按钮对数据进行累计时数据是匀速变化的,还可以使它加速变化

  1. QAbstractSpinBox.setAccelerated(True)
  2. QAbstractSpinBox.isAccelerated()

2.只读设置

这个只读是用户不能使用键盘输入数据,但是可以用鼠标点击按钮来实现数据的更改。

  1. QAbstractSpinBox.setReadOnly(True)
  2. QAbstractSpinBox.isReadOnly()

3.内容设置和获取

QAbstractSpinBox里面包含了一个QLineEdit控件,可以直接获取这个LineEdit对象

  1. QAbstractSpinBox.lineEdit()

这样就可以用QLineEdit里的方法对数据进行获取或修改

  1. QAbstractSpinBox.lineEdit().setText('str')
  2. QAbstractSpinBox.lineEdit().text()

其实QLineEdit里的很多功能(对齐、自动填充、验证器)都可以使用

但是因为我们常常需要从控件中获取数据,QAbstractSpinBox给我们留了一个直接的API

  1. QAbstractSpinBox.text()

可以直接获取数据。

4.对齐方式

  1. QAbstractSpinBox.setAlignment(Qt.AlignCenter)
  1. AlignLeft = ... # type: 'Qt.AlignmentFlag'
  2. AlignLeading = ... # type: 'Qt.AlignmentFlag'
  3. AlignRight = ... # type: 'Qt.AlignmentFlag'
  4. AlignTrailing = ... # type: 'Qt.AlignmentFlag'
  5. AlignHCenter = ... # type: 'Qt.AlignmentFlag'
  6. AlignJustify = ... # type: 'Qt.AlignmentFlag'
  7. AlignAbsolute = ... # type: 'Qt.AlignmentFlag'
  8. AlignHorizontal_Mask = ... # type: 'Qt.AlignmentFlag'
  9. AlignTop = ... # type: 'Qt.AlignmentFlag'
  10. AlignBottom = ... # type: 'Qt.AlignmentFlag'
  11. AlignVCenter = ... # type: 'Qt.AlignmentFlag'
  12. AlignVertical_Mask = ... # type: 'Qt.AlignmentFlag'
  13. AlignCenter = ... # type: 'Qt.AlignmentFlag'
  14. AlignBaseline = ... # type: 'Qt.AlignmentFlag'

对齐枚举值

5.边框显示

QAbstractSpinBox控件默认有边框的

右边的图就是默认情况,带有边框,也可以不显示边框

  1. QAbstractSpinBox.setFrame(False)

6.按钮的样式

还可以对按钮的样式进行修改

  1. QAbstractSpinBox.setButtonSymbols(QAbstractSpinBox.NoButtons)
  1. UpDownArrows = ... # type: 'QAbstractSpinBox.ButtonSymbols'
  2. PlusMinus = ... # type: 'QAbstractSpinBox.ButtonSymbols'
  3. NoButtons = ... # type: 'QAbstractSpinBox.ButtonSymbols'

按钮样式枚举值

枚举值中有个加减效果,但是我没试出来,不显示倒是可以的。

这里有个小技巧:如果不显示按钮,却又设置了只读模式,那么数据还能改么?可以的!在获取焦点后可以用键盘上下键来修改数据

7.内容验证

首先我们可以用QLineEdit来实现数据的验证,在这里我们讲是QAbstractSpinBox直接给出的API。

其实在一开始的案例我们就定义了一个验证器:数小于0或大于9999时再点击就没效果了,但是这仅限于用鼠标点击增减按钮。可以如果我不用鼠标,用键盘输入数据时是不调用这个方法了,那是不是就失效了!那就需要另外的方法了!但是试验是失败的,回来捋清楚了再说吧

8。信号

只有一个信号要讲

  1. QAbstractSpinBox.editingFinished()

其实就是结束了编辑:按下Enter键、切换焦点、点击右键,关闭程序

GUI学习之十五——QAbstractSpinBox学习总结的更多相关文章

  1. 201771010134杨其菊《面向对象程序设计(java)》第十五周学习

    第十五周学习总结 第一部分:理论知识 JAR文件: 应用程序首选项存储: Java Web Start JAR文件: 1.Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar ...

  2. 201671010140. 2016-2017-2 《Java程序设计》java学习第十五周

    java学习第十五周 Java的GUI界面设计,框架以及主要部件填充,归置,布局管理,在第十一章和第十二章进行了系统的学习,在这两章的知识奠基下,可以简单的构造一个GUI用户界面,在两周的学习后,可以 ...

  3. 201271050130-滕江南-《面向对象程序设计(java)》第十五周学习总结

    201271050130-滕江南-<面向对象程序设计(java)>第十五周学习总结 博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.c ...

  4. 201871010111-刘佳华《面向对象程序设计(java)》第十五周学习总结

    201871010111-刘佳华<面向对象程序设计(java)>第十五周学习总结 实验十三  Swing图形界面组件(二) 实验时间 2019-12-6 第一部分:理论知识总结 5> ...

  5. 201871010123-吴丽丽《面向对象程序设计(Java)》第十五周学习总结

    201871010123-吴丽丽<面向对象程序设计(Java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  6. 201871010104-陈园园 《面向对象程序设计(java)》第十五周学习总结

    201871010104-陈园园 <面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  7. 201871010105-曹玉中《面向对象程序设计(java)》第十五周学习总结

    201871010105-曹玉中<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个过程 https://www.cnblogs.com/nwnu-daizh/ ...

  8. 201871010106-丁宣元 《面向对象程序设计(java)》第十五周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第十五周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nw ...

  9. 201871010107-公海瑜《面向对象程序设计(java)》第十五周学习总结

    201871010107-公海瑜<面向对象程序设计(java)>第十五周学习总结             项目                            内容   这个作业属于 ...

随机推荐

  1. htonl(),htons(),ntohl(),ntons()--大小端模式转换函数

    不同机器内部对变量的字节存储顺序不同,有的采用大端模式(big-endian),有的采用小端模式(little-endian). 大端模式是指高字节数据存放在低地址处,低字节数据放在高地址处. 小端模 ...

  2. jpg图片转换为yuv

    ffmpeg -i d:/demo.jpg -s 400x500 -pix_fmt yuvj420p d:/test.yuv ffmpeg -i http://www.test.com/test.fl ...

  3. md5值校验

    使用哈希的md5给文件加指纹,如果文件被更改,指纹信息就会不匹配,从而确定文件的原值是否被改动. [root@b test]# md5sum a.txt > zhiwen.txt[root@b ...

  4. C/C++判断字符串是否包含某个字符串

    C风格 #include <iostream> #include <string> #include <cstring> using namespace std; ...

  5. (转)使用NMAP工具扫描端口

    原文:http://www.linuxde.net/2013/02/12354.html nmap 是一个用于网络探索或安全评测的工具.它支持 ping 扫描(判定哪些主机在运行),多端口扫描技术(判 ...

  6. linux iptables相关

    iptables -A INPUT -p udp --dport 90 -j ACCEPT iptables -A INPUT -p tcp -m state --state ESTABLISHED ...

  7. MyEclipse中的查找快捷键

    MyEclipse中的查找快捷键 1.Ctrl+H:可以搜索文件,Java类名.方法名.包名等等. 例如:在MyEclipse中打开Search弹出框,或者在菜单中打开Search弹出框, 定位到 F ...

  8. JMeter常用的4种参数化方式-操作解析

    目录结构 一.JMeter参数化简介 1.JMeter参数化的概念 2.JMeter参数化方式之使用场景对比 二.JMeter参数化的4种主要方式-操作演练 1.User Parameters(用户参 ...

  9. bzoj3028食物 关于(1+x+x2+x3+x4+...)^k的第i项系数就是c(i+k−1,k−1)的证明

    关于(1+x+x2+x3+x4+...)^k的第i项系数就是c(i+k−1,k−1)的证明对于第i项,假设为5x^5=x^0*x^5x^5=x^1*x^4x^5=x^2*x^3........也就是说 ...

  10. pandas中.value_counts()的用法

    原文链接:https://www.jianshu.com/p/f773b4b82c66 value_counts()是一种查看表格某列中有多少个不同值的快捷方法,并计算每个不同值有在该列中有多少重复值 ...