通過計算鼠標的位置和初始化位置來對選框進行移動操作
AbnormityWindowMove.py
""" 實現不規則窗口的移動(異形窗口) 通過mask實現異形窗口 需要一張透明的png圖, 透明部分被扣出, 形成一個非矩形區域 """ import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * class AbnormityWindowMove(QWidget): def __init__(self): super(AbnormityWindowMove, self).__init__() self.setWindowTitle("異形窗口") self.pix = QBitmap("../picture/mask.png") self.resize(self.pix.size()) self.setMask(self.pix) def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.m_drag = True self.m_DragPosition = event.globalPos() - self.pos() #self.pos()表示當前窗口的位置 #設置點擊以后設置小手指 self.setCursor(QCursor(Qt.OpenHandCursor)) # print(event.globalPos()) # print(event.pos()) # print(self.pos()) if event.button() == Qt.RightButton: self.close() def mouseMoveEvent(self, QMouseEvent): if Qt.LeftButton and self.m_drag: # 當左鍵移動窗體修改偏移值 # QPoint # 實時計算窗口左上角坐標 print(self.m_DragPosition) #當前的鼠標位置-初始化的位置 self.move(QMouseEvent.globalPos() - self.m_DragPosition) def mouseReleaseEvent(self, QMouseEvent): self.m_drag = False self.setCursor(QCursor(Qt.ArrowCursor)) def paintEvent(self, event): painter = QPainter(self) painter.drawPixmap(0, 0, self.pix.width(), self.pix.height(), QPixmap("../picture/screen1.jpg")) if __name__ == "__main__": app = QApplication(sys.argv) form = AbnormityWindowMove() form.show() sys.exit(app.exec_())