QRubberBand-----简介

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

。七十二。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值