zoukankan      html  css  js  c++  java
  • PyQt5Day23--输入控件QRubberBand橡皮筋选择控件

    一、QRubberBand

      提供一个矩形或线来指示选择或边界,一般结合鼠标事件一同协作。

    综合案例操作:

      在一个空白窗口内,展示多个复选框控件,通过橡皮筋实现批量选中与取消选中效果。

     1 # *******************QRubberBand**********************开始
     2 from PyQt5.Qt import *
     3 
     4 class Window(QWidget):
     5     def __init__(self):
     6         super().__init__()
     7         self.setWindowTitle("QRubberBand")
     8         self.resize(500, 500)
     9         self.setup_ui()
    10 
    11     def setup_ui(self):
    12         # 1.添加子控件,复选框
    13         for i in range(0,30):
    14             cb = QCheckBox(self)
    15             cb.setText("{}".format(i))
    16             cb.move(i%4*50,i//4*60)
    17 
    18         # 1.创建一个橡皮筋选中控件
    19         self.rb = QRubberBand(QRubberBand.Rectangle, self)
    20 
    21     def mousePressEvent(self, evt):
    22         # 2.尺寸大小:鼠标点击的位置点
    23         self.origin_pos = evt.pos()
    24         self.rb.setGeometry(QRect(self.origin_pos, QSize()))
    25         # 3.展示橡皮筋控件
    26         self.rb.show()
    27         pass
    28 
    29     def mouseMoveEvent(self, evt):
    30         # 1.调整橡皮筋选中控件的尺寸范围
    31         self.rb.setGeometry(QRect(self.origin_pos,evt.pos()).normalized()) # normalized()代表正向反向均可
    32         pass
    33 
    34     def mouseReleaseEvent(self, evt):
    35         # 1.获取橡皮筋控件的尺寸范围
    36         rect = self.rb.geometry()
    37         # 2.便利所有的子控件,查看哪些子控件在区域范围
    38         for child in self.children():
    39             if rect.contains(child.geometry()) and child.inherits("QCheckBox"):
    40                 # print(child)
    41                 child.toggle() # 切换状态
    42         self.rb.hide() # 隐藏橡皮筋
    43         pass
    44 
    45 if __name__ == '__main__':
    46     import sys
    47 
    48     app=QApplication(sys.argv)
    49 
    50     window=Window()
    51     window.show()
    52     sys.exit(app.exec_())
    53 # *******************QRubberBand**********************结束
  • 相关阅读:
    两条斜线
    Cantor表
    城市网络
    一起来数二叉树吧
    牛客网音乐研究(枚举)
    删括号
    合并回文子串
    寻找道路
    EXTJS 4.0.2 XML数据
    extjs4.0.2a gridpanel看不到横向滚动条的一种原因
  • 原文地址:https://www.cnblogs.com/fengxb1213/p/12739894.html
Copyright © 2011-2022 走看看