zoukankan      html  css  js  c++  java
  • GUI学习之二十二——QRubberBand学习总结

    今天学习一种全新的输入控件——QRubberBand()控件(橡皮筋选中)

    一.描述

    QRubberBand()提供了一个矩形或西安来只是选择或边界的效果(就像在桌面上点击鼠标后拖拽拉出来的框一样),一般和鼠标事件一同协作。

    该控件是继承自QWidget()控件的。

    二.功能作用

    1.构造函数

    控件的声明要求传递形状——线或矩形

    qrb = QRubberBand(QRubberBand.Rectangle,self)  #矩形
    qrb = QRubberBand(QRubberBand.Line,self)       #线

    声明出来的控件默认是不可见的,一般都是结合鼠标的点击、拖拽和释放来使用的。

    2.移动、大小调整

    QRubberBand控件有自己的move和resize接口,和父类的API使用方法一样,所以我暂时还不知道为什么会有一个子类的API和父类是一样的,貌似效果也一样。

    QRubberBand.move(self, p: QtCore.QPoint)
    QRubberBand.move(self, ax: int, ay: int)
    QRubberBand.resize(self, w: int, h: int)
    QRubberBand.resize(self, s: QtCore.QSize)
    QRubberBand.setGeometry(self, r: QtCore.QRect)                        #统一设置
    QRubberBand.setGeometry(self, ax: int, ay: int, aw: int, ah: int)

    三.案例分析

    做一个案例:有30个复选框,用QRubberBand框住后被框住的反选

    代码放在下面

    from PyQt5.Qt import *
    from PyQt5 import QtGui
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.resize(800,500)
            self.UI_test()
    
    
        def UI_test(self):
            for i in range(0,30):
                cb = QCheckBox(self)
                cb.setText(str(i))
                cb.move(i%4*50,i//4*60)         #创建30个复选框并按每行4个排列
            self.rb = QRubberBand(QRubberBand.Rectangle,self)
    
        def mousePressEvent(self, a0: QtGui.QMouseEvent):
            #展示橡皮筋控件
            #鼠标点击的位置为橡皮筋控件的位置
            self.origin_pos = a0.pos()
            self.rb.setGeometry(QRect(self.origin_pos ,QSize()))
            self.rb.show()
            pass
        def mouseMoveEvent(self, a0: QtGui.QMouseEvent):
            self.rb.resize(a0.x(),a0.y())
            # self.rb.setGeometry(QRect(self.origin_pos,a0.pos()))                #这样只能从左上拖到右下
            self.rb.setGeometry(QRect(self.origin_pos,a0.pos()).normalized())   #这样就好了
    
        def mouseReleaseEvent(self, a0: QtGui.QMouseEvent):
            #获取橡皮筋控件的尺寸
            #遍历复选框释放在橡皮筋控件内
            rect = self.rb.geometry()
            for child in self.children():
                if rect.contains(child.geometry())and child.inherits('QCheckBox'): #遍历出的控件包括RubberBand本身,把它排除掉
                    child.toggle()
            self.rb.hide()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Window()
        window.show()
        sys.exit(app.exec_())
    QRubberBand案例
  • 相关阅读:
    常用的虚拟化产品
    KVM虚拟化
    Jenkins流水线项目发布流程
    Jenkins安装,界面说明
    敏捷估算与规划—总结
    敏捷估算与规划—跟踪与交流
    敏捷估算与规划—进度安排
    敏捷估算与规划—为价值做规划
    敏捷估算与规划—问题与目标
    用户故事与敏捷方法笔记 --- 估算与计划
  • 原文地址:https://www.cnblogs.com/yinsedeyinse/p/10982331.html
Copyright © 2011-2022 走看看