QRubberBand简介: 重新探索QRubberBand的功能与特点
最编程
2024-08-14 15:42:38
...
1、QRubberBand:橡皮筋选中:选中一个东西,显示其边框。一般是结合鼠标事件同时完成某项需求。单独没什么意义。
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QRubberBand的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
# 橡皮控件需要定义其尺寸大小,位置对应尺寸
# 借助其他方法设置一定的区域才可以显示出来
rb = QRubberBand(QRubberBand.Rectangle, self)
rb.setGeometry(10, 10, 60, 60)
# 判断当前橡皮筋属性是否被显示
print(rb.isVisible())
rb.show()
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Window()
window.resize(500, 500)
window.show()
sys.exit(app.exec_())
2、QRubberBand----案例
在一个空白窗口内,展示多个复选框控件,通过橡皮筋实现批量选中与取消选中效果。
当鼠标按下,需要创建一个橡皮筋控件,鼠标移动的时候,调整橡皮筋控件的范围区域,当松开鼠标,拿到橡皮筋选中区域做判定,那些子控件在选中区域范围内,改变他的选中标识。
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QRubberBand----案例的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
# 0,添加子控件,复选框
# 一行有四列,每列宽度为50
for i in range(0, 30):
cb = QCheckBox(self)
cb.setText("{}".format(i))
cb.move(i % 4 * 50, i // 4 * 60)
# 1创建一个橡皮筋选中控件
self.rb = QRubberBand(QRubberBand.Rectangle, self)
def mousePressEvent(self, evt):
# 2尺寸大小:鼠标点击的位置点,00,获取相对于窗口的局部点
self.origin_pos = evt.pos()
# 鼠标刚按下去是没有尺寸的,所以给他一个空的尺寸
self.rb.setGeometry(QRect(self.origin_pos, QSize()))
# 3展示橡皮筋控件,
self.rb.show()
def mouseMoveEvent(self, evt):
# 调整橡皮筋选中控件的位置及尺寸,
# .normalized()保证没有负数
# 新的坐标点减去旧的坐标点,或者分别传递左上角和右下角坐标,显示选中区域
self.rb.setGeometry(QRect(self.origin_pos, evt.pos()).normalized())
# 反向选中效果
def mouseReleaseEvent(self, evt):
# 1 获取橡皮筋控件的尺寸范围
rect = self.rb.geometry()
# 2 遍历所有的子控件,查看,那些子控件在区域范围
for child in self.children():
# 判断一个矩形是否包含另外一个点或者另外一个矩形
if rect.contains(child.geometry()) and child.inherits("QCheckBox"):
print(child)
# 切换状态
child.toggle()
self.rb.hide()
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Window()
window.resize(500, 500)
window.show()
sys.exit(app.exec_())