今天学习一种全新的输入控件——QRubberBand()控件(橡皮筋选中)

一.描述

QRubberBand()提供了一个矩形或西安来只是选择或边界的效果(就像在桌面上点击鼠标后拖拽拉出来的框一样),一般和鼠标事件一同协作。

该控件是继承自QWidget()控件的。

二.功能作用

1.构造函数

控件的声明要求传递形状——线或矩形

qrb = QRubberBand(QRubberBand.Rectangle,self)  #矩形
qrb = QRubberBand(QRubberBand.Line,self) #线

声明出来的控件默认是不可见的,一般都是结合鼠标的点击、拖拽和释放来使用的。

2.移动、大小调整

QRubberBand控件有自己的move和resize接口,和父类的API使用方法一样,所以我暂时还不知道为什么会有一个子类的API和父类是一样的,貌似效果也一样。

QRubberBand.move(self, p: QtCore.QPoint)
QRubberBand.move(self, ax: int, ay: int)
QRubberBand.resize(self, w: int, h: int)
QRubberBand.resize(self, s: QtCore.QSize)
QRubberBand.setGeometry(self, r: QtCore.QRect) #统一设置
QRubberBand.setGeometry(self, ax: int, ay: int, aw: int, ah: int)

三.案例分析

做一个案例:有30个复选框,用QRubberBand框住后被框住的反选

代码放在下面

from PyQt5.Qt import *
from PyQt5 import QtGui
import sys class Window(QWidget):
def __init__(self):
super().__init__()
self.resize(800,500)
self.UI_test() def UI_test(self):
for i in range(0,30):
cb = QCheckBox(self)
cb.setText(str(i))
cb.move(i%4*50,i//4*60) #创建30个复选框并按每行4个排列
self.rb = QRubberBand(QRubberBand.Rectangle,self) def mousePressEvent(self, a0: QtGui.QMouseEvent):
#展示橡皮筋控件
#鼠标点击的位置为橡皮筋控件的位置
self.origin_pos = a0.pos()
self.rb.setGeometry(QRect(self.origin_pos ,QSize()))
self.rb.show()
pass
def mouseMoveEvent(self, a0: QtGui.QMouseEvent):
self.rb.resize(a0.x(),a0.y())
# self.rb.setGeometry(QRect(self.origin_pos,a0.pos())) #这样只能从左上拖到右下
self.rb.setGeometry(QRect(self.origin_pos,a0.pos()).normalized()) #这样就好了 def mouseReleaseEvent(self, a0: QtGui.QMouseEvent):
#获取橡皮筋控件的尺寸
#遍历复选框释放在橡皮筋控件内
rect = self.rb.geometry()
for child in self.children():
if rect.contains(child.geometry())and child.inherits('QCheckBox'): #遍历出的控件包括RubberBand本身,把它排除掉
child.toggle()
self.rb.hide() if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())

QRubberBand案例

GUI学习之二十二——QRubberBand学习总结的更多相关文章

  1. 我的MYSQL学习心得(十二) 触发器

    我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数 ...

  2. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

  3. 我的MYSQL学习心得(十二)

    原文:我的MYSQL学习心得(十二) 我的MYSQL学习心得(十二) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYS ...

  4. Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)——S ...

  5. Linux学习总结(十二)—— CentOS用户管理:创建用户、修改用户、修改密码、密码有效期、禁用账户、解锁账户、删除用户、查看所有用户信息

    文章首发于Linux学习总结(十二)-- CentOS用户管理,请尊重原创保留原文链接. 创建用户 useradd -g webadmin -d /home/zhangsan zhangsan pas ...

  6. python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字

    python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...

  7. 汇编入门学习笔记 (十二)—— int指令、port

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...

  8. 学习笔记:CentOS7学习之二十二: 结构化命令case和for、while循环

    目录 学习笔记:CentOS7学习之二十二: 结构化命令case和for.while循环 22.1 流程控制语句:case 22.2 循环语句 22.1.2 for-do-done 22.3 whil ...

  9. (C/C++学习笔记) 二十二. 标准模板库

    二十二. 标准模板库 ● STL基本介绍 标准模板库(STL, standard template library): C++提供的大量的函数模板(通用算法)和类模板. ※ 为什么我们一般不需要自己写 ...

  10. Bootstrap <基础二十二>超大屏幕(Jumbotron)

    Bootstrap 支持的另一个特性,超大屏幕(Jumbotron).顾名思义该组件可以增加标题的大小,并为登陆页面内容添加更多的外边距(margin).使用超大屏幕(Jumbotron)的步骤如下: ...

随机推荐

  1. centos设置定时删除文件定时清理网站日志

    1.进入linux系统 2.在任意目录创建一个sh后缀的文件,如: 3.编辑打开该文件,如图: 4.此时按键盘上的“i”键或者“insert”键,进入编辑模式 输入: #!/bin/shfind /d ...

  2. 在vi vim中使用正则表达式与 普通perl正则的区别?

    参考这篇文章很好 vim中的正则表达式常用的命令有种, 即搜索和替换 /: 搜索 :s 替换 在vim中的正则表达式和perl编程的正则表达式还是有区别的: 正则表达式中的内容包括: 字面字符... ...

  3. 2、electron进程

    electron核心我们可以分成2个部分,主进程和渲染进程. 主进程: 主进程连接着操作系统和渲染进程,可以把她看做页面和计算机沟通的桥梁. Electron 运行 package.json 的 ma ...

  4. Python学习之==>函数

    一.函数是什么: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需要调用函数名就行. 二.函数的作用: 1.简化代码 2.提高代码的复用性 3.代码可扩展 三.定义函数: ...

  5. python string_2 内建函数详解

    先定义2个字符串变量 #coding:utf-8 s1="http" s2="http://www.cnblogs.com/sub2020/p/7988111.html& ...

  6. Python Requests post方法中data与json参数问题

    1.data参数 你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单.要实现这个,只需简单地传递一个字典给 data 参数.你的数据字典在发出请求时会自动编码为表单形式,header默认 ...

  7. dotnet core排序异常,本地测试和linux上结果不一致

    根据汉字排序,本地测试结构正常,发到docker之后,发现汉字升序降序和本地相反,检查代码后,没找到任何可能出现问题的点. 然后去翻文档:字符串比较操作 看到了这一句,会区分区域性 然后猜测应该是do ...

  8. LeetCode.876-链表的中间节点(Middle of the Linked List)

    这是悦乐书的第337次更新,第361篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第206题(顺位题号是876).给定具有头节点的非空单链表,返回链表的中间节点.如果有两 ...

  9. sentos7网卡改名

    一.已经装好系统CentOS7修改网卡为eth0 1. 修改网卡配置文件[root@localhost ~]# mv /etc/sysconfig/network-scripts/ifcfg-ens3 ...

  10. 20191110 Spring Boot官方文档学习(3)

    3.使用Spring Boot 3.1.构建系统 建议选择Maven或Gradle作为构建工具 每个Spring Boot版本都提供了它所支持的依赖关系的精选列表.实际上,您不需要为构建配置中的所有这 ...