ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

7.11 QRubberBand橡皮筋控件

2022-04-12 12:34:13  阅读:147  来源: 互联网

标签:__ 控件 7.11 self 橡皮筋 rb QRubberBand


一、QRubberBand橡皮筋控件

1.基本概念

  • 选中或去除已选范围

2.代码

点击查看代码
from PyQt5.Qt import *
import sys


class Window(QWidget) :
    def __init__(self) :
        super().__init__()
        self.setWindowTitle("QRubberBand橡皮筋控件 - PyQt5中文网")
        self.resize(600, 500)
        self.func_list()

    def func_list(self) :
        self.func()

    def func(self) :
        # Line = 0  线形
        # Rectangle = 1 矩形
        ##创建步骤(以下三条命令)
        # rb = QRubberBand(QRubberBand.Rectangle,self)
        # rb.setGeometry(QRect(30,30,30,30))  # 区域选择
        # rb.show()

        ##案例:
        #1创建按钮
        for i in range(0, 120) :
            ck = QCheckBox(self)
            ck.setText(str(i))
            ck.move(i % 10 * 60, i // 10 * 40)
        #2创建橡皮筋控件
        self.rb = QRubberBand(QRubberBand.Rectangle, self)

    #3创建事件:找到鼠标点击的点
    def mousePressEvent(self, QMouseEvent) :
        # 创建一个橡皮筋控件
        # self.rb = QRubberBand(QRubberBand.Rectangle, self)  # 这行放到上面,避免同时出现多个选择区域,否则每次按下都会创建一个控件
        # 设置尺寸
        self.old_point = QMouseEvent.pos()
        self.rb.setGeometry(QRect(self.old_point, QSize()))
        # 展示控件
        self.rb.show()
    #4鼠标移动区域控件:找到区域
    def mouseMoveEvent(self, QMouseEvent) :
        # 计算出选择的区域尺寸
        self.rb.setGeometry(QRect(self.old_point, QMouseEvent.pos()).normalized())  # 6normalized()用来解决反向拖拽选择
    #5鼠标松开事件:
    def mouseReleaseEvent(self, QMouseEvent) :
        # 获取橡皮筋控件选择范围
        wh = self.rb.geometry() #获取范围
        # 遍历控件
        for child in self.children() :  #找到所有的子控件
            if wh.contains(child.geometry()) and child.inherits('QCheckBox') : #包含该子控件,并且子控件是QCheckBox
                child.toggle() #切换现有的状态
        self.rb.hide() #把橡皮筋控件隐藏掉


if __name__ == '__main__' :
    app = QApplication(sys.argv)
    window = Window()

    window.show()
    sys.exit(app.exec_())

3.效果

标签:__,控件,7.11,self,橡皮筋,rb,QRubberBand
来源: https://www.cnblogs.com/yuyingblogs/p/16134513.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有