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_())