1. 程式人生 > >PyQt5無邊框後窗口的移動方法

PyQt5無邊框後窗口的移動方法

由於隱藏了標題欄無法通過點選標題欄來實現視窗的移動,這時候我們可以通過滑鼠事件來移動視窗

第一步:判斷滑鼠左鍵是否被按下,如果按下則將flag設為True並獲取當前的位置

第二步:判斷滑鼠是否移動並且左鍵被按下,若移動了計算移動的距離在移動視窗

第三步:若滑鼠釋放了則將flag設為False

具體做法:重寫視窗類自帶的三個函式

    def mousePressEvent(self, event):
        if event.button()==Qt.LeftButton:
            self.m_flag=True
            self.m_Position=event.globalPos()-self.pos() #獲取滑鼠相對視窗的位置
            event.accept()
            self.setCursor(QCursor(Qt.OpenHandCursor))  #更改滑鼠圖示
            
    def mouseMoveEvent(self, QMouseEvent):
        if Qt.LeftButton and self.m_flag:  
            self.move(QMouseEvent.globalPos()-self.m_Position)#更改視窗位置
            QMouseEvent.accept()
            
    def mouseReleaseEvent(self, QMouseEvent):
        self.m_flag=False
        self.setCursor(QCursor(Qt.ArrowCursor))

最後最小化和關閉可以設定兩個按鈕,通過點選按鈕來觸發
    @pyqtSlot()
    def on_pushButton_clicked(self):
        """
        關閉視窗
        """
        self.close()
    
    @pyqtSlot()
    def on_pushButton_2_clicked(self):
        """
        最小化視窗
        """
        self.showMinimized()

ps :設定無邊框和背景透明

# 設定窗體無邊框
# self.setWindowFlags(Qt.FramelessWindowHint)
# 設定背景透明
# self.setAttribute(Qt.WA_TranslucentBackground)

效果圖


win10自帶的錄屏只能錄當前軟體那個區域。。。。。。。

就這樣吧