一、QRubberBand
提供一个矩形或线来指示选择或边界,一般结合鼠标事件一同协作。
综合案例操作:
在一个空白窗口内,展示多个复选框控件,通过橡皮筋实现批量选中与取消选中效果。
1 # *******************QRubberBand**********************开始 2 from PyQt5.Qt import * 3 4 class Window(QWidget): 5 def __init__(self): 6 super().__init__() 7 self.setWindowTitle("QRubberBand") 8 self.resize(500, 500) 9 self.setup_ui() 10 11 def setup_ui(self): 12 # 1.添加子控件,复选框 13 for i in range(0,30): 14 cb = QCheckBox(self) 15 cb.setText("{}".format(i)) 16 cb.move(i%4*50,i//4*60) 17 18 # 1.创建一个橡皮筋选中控件 19 self.rb = QRubberBand(QRubberBand.Rectangle, self) 20 21 def mousePressEvent(self, evt): 22 # 2.尺寸大小:鼠标点击的位置点 23 self.origin_pos = evt.pos() 24 self.rb.setGeometry(QRect(self.origin_pos, QSize())) 25 # 3.展示橡皮筋控件 26 self.rb.show() 27 pass 28 29 def mouseMoveEvent(self, evt): 30 # 1.调整橡皮筋选中控件的尺寸范围 31 self.rb.setGeometry(QRect(self.origin_pos,evt.pos()).normalized()) # normalized()代表正向反向均可 32 pass 33 34 def mouseReleaseEvent(self, evt): 35 # 1.获取橡皮筋控件的尺寸范围 36 rect = self.rb.geometry() 37 # 2.便利所有的子控件,查看哪些子控件在区域范围 38 for child in self.children(): 39 if rect.contains(child.geometry()) and child.inherits("QCheckBox"): 40 # print(child) 41 child.toggle() # 切换状态 42 self.rb.hide() # 隐藏橡皮筋 43 pass 44 45 if __name__ == '__main__': 46 import sys 47 48 app=QApplication(sys.argv) 49 50 window=Window() 51 window.show() 52 sys.exit(app.exec_()) 53 # *******************QRubberBand**********************结束