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_())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM