057.PyQt5_QRubberBand_橡皮筋选中框

QRubberBand 橡皮筋选中框

  • 描述

    • 提供一个矩形或线来指示选择或边界
    • 一般结合鼠标事件(鼠标点击、鼠标移动、鼠标释放)一同协作
      mousePressEvent(self, evt)          # 鼠标点击事件
      mouseMoveEvent(self, evt)           # 鼠标移动事件
      mouseReleaseEvent(self, evt)        # 鼠标释放事件
      
      • 在鼠标点击事件中:设置控件位置、大小、显示橡皮筋选中控件
      • 在鼠标移动事件中:更新橡皮筋选中控件大小
      • 在鼠标释放事件中:获取框选对象、影藏橡皮筋选中控件
  • 继承自:QWidget

  • 功能作用

  • 构造函数

    QRubberBand(QRubberBand.Shape, parent: QWidget = None)          # 创建对象的同时设置对象形状并设置父对象
        # 参数:QRubberBand.Shape
                QRubberBand.Line                                    # 设置形状为一条线
                QRubberBand.Rectangle                               # 设置形状为矩形框
    
  • 移动

    move(x, y)                                                      # 通过数值设置移动位置
    move(QPoint)                                                    # 通过QPoint对象设置移动位置
    
    # QPoint(int, int)      (x坐标,y坐标)
    
  • 调整大小

    resize(width, height)                                           # 通过数值设置控件宽度和高度
    resize(QSize)                                                   # 通过QSize对象设置控件宽度和高度
    
    # QSize(int, int)       (宽度,高度)
    
  • 统一设置(坐标和大小)

    setGeometry(int x, int y, int width, int height)            # 通过x、y坐标、宽度、高度设置框选范围
    
    setGeometry(QRect rect)                                     # 通过QRect对象设置框选范围
    
    # QRect(int, int, int, int)     x坐标、y坐标、宽度、高度
    # QRect(QPoint, QPoint)         左上角一个点(x,y),右下角一个点(x,y)
    # QRect(QPoint, QSize)          左上角一个点(x,y),QSize(宽度,高度)
    # QPoint可以通过 evt.pos() 直接获取
    
    # QRect通过normalized()方法设置计算出来的宽和高保持为正数(鼠标点击后往左拉框选时)
    
    geometry()                                                  # 获取框选范围
    
  • 形状获取

    shape() -> QRubberBand.Shape                                # 获取橡皮筋选中控件对象的形状
    
  • 关联内容

  • 判断一个范围是否包含另一个范围

    范围1.contains(范围2)               # 判断控件是否在另一个控件内部,返回True/False
    
    # 范围可以通过 obj.geometry() 获取
    
  • 判断一个控件是否继承自另一个控件

    控件1.inherits("控件2类名")             # 判断控件1是否继承自控件2类
    
  • 可用信号

    • 继承父类

  • 代码示例

  • 示例1:QRubberBand-功能作用

    from PyQt5.Qt import *
    import sys
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QRubberBand-功能作用')
            self.resize(500, 500)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
    
        def add_widget(self):
            rbd = QRubberBand(QRubberBand.Rectangle, self)
            rbd.resize(100, 100)
            rbd.show()
            rbd.move(100,100)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
    
  • 案例2:在一个空白窗口内, 展示多个复选框控件,通过橡皮筋实现批量选中与取消选中效果

  • 效果图

    • 057.PyQt5_QRubberBand_橡皮筋选中框_第1张图片

  • 示例代码

    from PyQt5.Qt import *
    import sys
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QRubberBand-案例')
            self.resize(500, 500)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
    
        def add_widget(self):
            self.rbd = QRubberBand(QRubberBand.Rectangle,self)
    
            for i in range(0, 30):
                cb = QCheckBox(self)
                cb.setText(str(i))
                # 5 * 6
                cb.move(i % 5 * 50 + 50, i // 5 * 50 + 50)
    
        def mousePressEvent(self, evt) -> None:
            self.rbd.setVisible(True)
            self.oldpos = evt.pos()
            self.rbd.setGeometry(QRect(evt.pos(),evt.pos()))
    
        def mouseMoveEvent(self, evt) -> None:
            self.rbd.setGeometry(QRect(self.oldpos,evt.pos()).normalized())
    
        def mouseReleaseEvent(self, evt) -> None:
            self.rbd.setVisible(False)
            geo = self.rbd.geometry()
    
            for sub in self.children():
                if geo.contains(sub.geometry()) and sub.inherits('QCheckBox'):
                    sub.toggle()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())

     

你可能感兴趣的:(PyQt5,pyqt5,python,gui,python,pyqt,qt)