pyqt5-橡皮筋控件QRubberBand
提供一个矩形或线来指示选择或边界
一般结合鼠标事件一同协作
继承于 QWidget
import sys from PyQt5.QtWidgets import QApplication, QWidget,QRubberBand,QCheckBox from PyQt5.QtCore import QRect,QSize class Demo(QWidget): def __init__(self): super().__init__() self.resize(300,300) #rb=QRubberBand(QRubberBand.Rectangle,self) #创建橡皮筋控件 #参数:橡皮筋的轮廓 #QRubberBand.Line=0 线 #QRubberBand.Rectangle=1 矩形 #rb.setGeometry(10, 10, 50, 40) #位置和大小 #其它 #move(x, y) move(QPoint) #resize(width, height) resize(QSize) #setGeometry(QRect rect) #shape() -> QRubberBand.Shape 形状获取 #rb.show() #显示 #一般是不显示的,用鼠标选择时才显示 #案例 for i in range(0,30): cb=QCheckBox(self) cb.setText(str(i)) cb.move(i%4*50,i//4*30) #50表示每列的宽度 30表示每行的高度 #i%4 表示第i列 i//4 表示第几行 self.rb = QRubberBand(QRubberBand.Rectangle, self) # 创建橡皮筋控件 def mousePressEvent(self, event): # 鼠标键按下时调用 #1.尺寸:鼠标的点击位置 #2.展示橡皮筋控件 self.weizi=event.pos() self.rb.setGeometry(QRect(self.weizi,QSize())) self.rb.show() def mouseMoveEvent(self, event): # 鼠标移动事件 #调整橡皮筋控件的尺寸 self.rb.setGeometry(QRect(self.weizi, event.pos()).normalized()) #normalized() 使鼠标往下往上归一化,如果width<0 交换左右角;如果height<0,就交换顶角和底角 #我不理解的问题:QRect的第二个参数不是应该是矩形的width和height,event.pos()不是鼠标的位置吗,它不是宽和高,我认为应该减去原点才是宽和高啊?请理解的学友给我解释解释 pass def mouseReleaseEvent(self, event): # 鼠标键释放时调用 #1.获取橡皮筋控件的尺寸范围 #2.遍历所有的子控件,查看哪些控件在区域范围 rect=self.rb.geometry() for child in self.children(): if rect.contains(child.geometry()) and child.inherits('QCheckBox'): #contains rect的范围是否包含参数的范围 #child.inherits('QCheckBox') child继承于QCheckBox child.toggle() self.rb.hide() pass def AA(self,val): print(val) if __name__ == '__main__': app = QApplication(sys.argv) demo = Demo() demo.show() sys.exit(app.exec_())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)