• pyqt5-橡皮筋控件QRubberBand


    提供一个矩形或线来指示选择或边界

    一般结合鼠标事件一同协作

    继承于 QWidget  

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget,QRubberBand,QCheckBox
    from PyQt5.QtCore import QRect,QSize
    
    class Demo(QWidget):
        def __init__(self):
            super().__init__()
            self.resize(300,300)
    
            #rb=QRubberBand(QRubberBand.Rectangle,self)  #创建橡皮筋控件
            #参数:橡皮筋的轮廓
            #QRubberBand.Line=0  线
            #QRubberBand.Rectangle=1 矩形
    
            #rb.setGeometry(10, 10, 50, 40)  #位置和大小
    
            #其它
            #move(x, y)    move(QPoint)
            #resize(width, height)      resize(QSize)
            #setGeometry(QRect rect)
            #shape() -> QRubberBand.Shape     形状获取
    
            #rb.show()  #显示
            #一般是不显示的,用鼠标选择时才显示
    
            #案例
            for i in range(0,30):
                cb=QCheckBox(self)
                cb.setText(str(i))
                cb.move(i%4*50,i//4*30)
                #50表示每列的宽度   30表示每行的高度
                #i%4  表示第i列      i//4  表示第几行
    
                self.rb = QRubberBand(QRubberBand.Rectangle, self)  # 创建橡皮筋控件
    
        def mousePressEvent(self, event):  # 鼠标键按下时调用
                #1.尺寸:鼠标的点击位置
                #2.展示橡皮筋控件
    
            self.weizi=event.pos()
            self.rb.setGeometry(QRect(self.weizi,QSize()))
            self.rb.show()
    
    
        def mouseMoveEvent(self, event):  # 鼠标移动事件
                #调整橡皮筋控件的尺寸
            self.rb.setGeometry(QRect(self.weizi, event.pos()).normalized())
                #normalized()  使鼠标往下往上归一化,如果width<0 交换左右角;如果height<0,就交换顶角和底角
                #我不理解的问题:QRect的第二个参数不是应该是矩形的width和height,event.pos()不是鼠标的位置吗,它不是宽和高,我认为应该减去原点才是宽和高啊?请理解的学友给我解释解释
    
            pass
    
        def mouseReleaseEvent(self, event):  # 鼠标键释放时调用
                #1.获取橡皮筋控件的尺寸范围
                #2.遍历所有的子控件,查看哪些控件在区域范围
            rect=self.rb.geometry()
            for child in self.children():
                if rect.contains(child.geometry()) and child.inherits('QCheckBox'):
                    #contains  rect的范围是否包含参数的范围
                    #child.inherits('QCheckBox')    child继承于QCheckBox
                    child.toggle()
                self.rb.hide()
            pass
    
    
        def AA(self,val):
            print(val)
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        demo = Demo()
        demo.show()
        sys.exit(app.exec_())
  • 相关阅读:
    zabbix3.4报警队列过多清理
    k8s安装nexus并导入第三方jar包
    kubeadmin安装最新版本的kubenets
    aws相关知识
    mysql忘记root密码做法
    mysql实现读写分离(proxy)与高可用(MGR)
    jvm调优
    zabbix监控php-fpm的性能
    脚本
    opencv demo
  • 原文地址:https://www.cnblogs.com/liming19680104/p/11022724.html
Copyright © 2020-2023  润新知