今天学习一种全新的输入控件——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. windows的 附件到底是什么东东?

    附件, 包括其父目录"所有程序" -> "开始菜单", 其实都是一个目录而已!! 要对"开始菜单"下的所有内容进行 自定义 : 添加删 ...

  2. 前端必须掌握的 docker 技能(3)

    概述 作为一个前端,我觉得必须要学会使用 docker 干下面几件事: 部署前端应用 部署 nginx 给部署的 nginx 加上 https 使用 docker compose 进行部署 给 ngi ...

  3. JS单引号嵌套的问题,怎么改才能对呢!

    JS单引号嵌套的问题,怎么改才能对呢! https://zhidao.baidu.com/question/416584343.html document.getElementById(celbid) ...

  4. eclipse和myeclipse怎么在项目中查找指定代码?https://www.jb51.net/softjc/554889.html

    有的童鞋,想eclipse和myeclipse整个项目中查找指定代码,由于补经常使用,可能会补熟悉.如果要去掉项目中所有的某个代码的话,找不到是灰常麻烦的,下面就简单说下怎么查找,希望对需要的人有用. ...

  5. node-webkit-updater——NW.js自动更新

    NW.js自动更新三种方案: 1)node-webkit-updater(推荐) 2)nwjs-autoupdater 3)nw-autoupdater NW.js自动更新三种方案:[http://d ...

  6. wcf restful 访问报错 *.svc HTTP error 404.17 - Not Found

    安装完成 iisreset,即使不重启也已经可以使用了

  7. 推荐Calendar操作日期

    package com.example.demo.Calender; import java.text.SimpleDateFormat;import java.util.Calendar;impor ...

  8. 不容错过的 MySQL史上最全

    点击下方链接 http://c.biancheng.net/view/2361.html

  9. STM32 晶振 系统时钟8MHZ和72Mhz的原因

    首先问题描述: 1.自己画的板子和淘宝买的最小系统板 系统时钟不一致,自己画的是8Mhz,HSE失败:最小系统板72Mhz 2.最小系统板在程序1运行仿真的时候,查看peripherals->P ...

  10. JS案例经验二

    一 关键词:鼠标事件的触发 可以在函数中指定让鼠标事件自动触发,而不是必须要鼠标滑过才触发,例如: main.onmouseover(); // 可以把该语句看做是鼠标滑过的模拟动作 main是DOM ...