今天学习一种全新的输入控件——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. C# 使用 MsieJavaScriptEngine 引擎运行JavaScript

    用这个东西实现了一个js脚本引擎代码生成器,调研的时候这个东西的资料比较少. 我就根据自己的这点应用来讲解讲解,有错误,不符的地方还请园友指出. 使用 Nuget 安装 MsieJavaScriptE ...

  2. 网站运营文章LIST

    如何建立网站地图(site map) ● 伤心SEO之太平洋 ● 关键字密度与网站排名 ● 哪些因素决定网站SEO的价格 ● SEO:站在Google背后的搜钱力量 ● 网站被一搜索屏蔽,郁闷! ●  ...

  3. memcached空指针内存错误与死循环问题分析(memcached dead loop and crash bug! issue #260 and issue #370)

    (由于这是发在memcached邮件列表的,所以只能用一下蹩脚的英文了) (you should read the discuss about issue #260 first:  https://g ...

  4. 用ps 查看线程状态

    ps -eLo pid,tid,class,rtprio,ni,pri,psr,pcpu,pmem,stat,wchan:30,comm 线程相关选项: THREAD DISPLAY H Show t ...

  5. mount -o是什么意思

    mount -o是用loop设备, 在 linux挂载本地的(可能是硬盘上的) iso文件时, 使用的. -o 就是loop回环设备的意思. loop回路文件系统: 是: 用来在一个文件系统上实现另一 ...

  6. 安装ubuntu双系统

    今天在win7下安装ubuntu14.1双系统,别折磨了一个下午.主要是开机系统引导问题. 引导程序是位于硬盘最前面的一段程序,由于扇区大部分是引导程序,故也成引导扇区.此外包含有硬盘的分区信息,共6 ...

  7. 服务器端-W3Chool:服务器脚本教程

    ylbtech-服务器端-W3Chool:服务器脚本教程 1.返回顶部 1. 服务器脚本教程 从左侧的菜单选择你需要的教程! SQL SQL 是用于访问和处理数据库的标准的计算机语言. 在本教程中,您 ...

  8. Windows10 家庭版安装 Docker Desktop

    开启 Hyper-V 开启后会有提示让重启电脑,重启就 OK :: 创建cmd (echo pushd "%~dp0" echo dir /b %SystemRoot%\servi ...

  9. Vue项目移动端滚动穿透问题

    概述 今天在做 Vue 移动端项目的时候遇到了滚动穿透问题,在网上查资料后,选取了我觉得最好的方法,记录下来供以后开发时参考,相信对其他人也有用. 上层无需滚动 如果上层无需滚动的话,直接屏蔽上层的 ...

  10. oracle 日期格式操作

    原文转自:http://hi.baidu.com/gzfvb/blog/item/5062b7f008eb70a8a50f5206.html   Oracle日期格式:   to_date(" ...