PyQt5Day23--输入控件QRubberBand橡皮筋选择控件

一、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**********************结束
原文地址:https://www.cnblogs.com/fengxb1213/p/12739894.html