PyQt5入門(二十五)異形視窗
阿新 • • 發佈:2021-02-18
一.實現不規則視窗(異形視窗)
通過mask實現異形視窗
需要一張透明的png圖,透明部分被扣出,形成一個非矩形的區域
程式碼:
import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * class AbnormityWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle("異形視窗") self.pix = QBitmap('../picture/images/mask.png') self.resize(self.pix.size()) #設定掩膜,視窗就是掩膜的形狀 self.setMask(self.pix) def paintEvent(self, event): painter=QPainter(self) painter.drawPixmap(0,0,self.pix.width(),self.pix.height(),QPixmap('../picture/images/screen1.jpg')) if __name__ == "__main__": app = QApplication(sys.argv) form = AbnormityWindow() form.show() sys.exit(app.exec_())
執行結果:
可見視窗成了掩膜的形狀。
掩膜圖片: 視窗圖片:
執行出的視窗:
二.移動和關閉不規則視窗(異形視窗)
pyqt5中的座標系
程式碼:
結合程式碼看移動距離
import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * class AbnormityWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle("異形視窗") self.pix = QBitmap('../picture/images/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() #print(self.m_DragPosition) #設定游標形狀 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 ''' 實時計算視窗左上角座標,注意是左上角!!!!!! 這個移動是從上次的視窗位置往現在到達的位置移動, 所以是現在的globalPos()減去移動之前的單擊點到視窗邊框的距離,就是當前左上角座標 ''' self.move(QMouseEvent.globalPos() - self.m_DragPosition) #滑鼠抬起 def mouseReleaseEvent(self, QMouseEvent): self.m_drag = False #cursor(n.)游標 self.setCursor(QCursor(Qt.ArrowCursor)) def paintEvent(self, event): painter = QPainter(self) painter.drawPixmap(0,0,self.pix.width(),self.pix.height(),QPixmap('../picture/images/screen1.jpg')) if __name__ == "__main__": app = QApplication(sys.argv) form = AbnormityWindow() form.show() sys.exit(app.exec_())
執行結果:
介面和上面一樣,就是左鍵按住可以拖動,單擊右鍵可以關閉視窗。
三. 實現異形視窗動畫效果
這塊有點繞腦子,我先休息會。
程式碼:
執行結果:
這玩意一直在旋轉。自己試試吧。