提供一個矩形或線來指示選擇或邊界
一般結合鼠標事件一同協作
繼承於 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_())