天天看點

pyQt5 學習筆記(8)視窗标志位一、視窗标志位二、視窗标志的使用

文章目錄

  • 一、視窗标志位
  • 二、視窗标志的使用
    • 1. 設定視窗标志的方法
    • 2. 示例
    • 3. 應用:通過滑鼠點選顯示和影藏邊框

一、視窗标志位

在pyQt中,對于沒有父控件的控件,會自動添加标題欄,我們稱之為“視窗”,一下代碼建立了一個QWidget控件:

from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)

w1 = QWidget()
w1.show()

sys.exit(app.exec_())
           

由于其沒有父控件,是以自動添加标題欄,稱為一個視窗:

pyQt5 學習筆記(8)視窗标志位一、視窗标志位二、視窗标志的使用

可以看到,程式沒有指定大小,圖示,标題名稱,是以以上均有程式預設樣式。這是一個最基本,常見的視窗,但是一些時候,我們并不需要一個這樣的視窗,比如,在彈出的提示對話框中,可能隻需要一個關閉按鈕,一些特殊的視窗是禁止使用者改變其大小的,以及當我們要自定義标題欄的時候,就需要影藏預設的标題欄…這一些都可以通過視窗标志(

flags

)來實作。

二、視窗标志的使用

1. 設定視窗标志的方法

我們可以通過以下方法來設定視窗标志:

  • 建立對象時候,直接設定flags的值
  • 通過函數

    setWindowFlag()

    設定
  • 通過函數

    setWindowFlags()

    設定,與

    setWindowFlag()

    的差別是可以同時設定多個标志位

2. 示例

以下程式示例了如何通過标志位建立不同的視窗:

from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)

#0.建立一個預設視窗
w0 = QWidget()
w0.move(100,100)
w0.show()

#1.建立一個無法調整大小的視窗
w1 = QWidget(flags=Qt.MSWindowsFixedSizeDialogHint)
w1.move(200,200)
w1.show()

#2. 建立一個隐藏邊框的視窗
w2 = QWidget()
w2.setWindowFlag(Qt.FramelessWindowHint)
w2.move(300,300)
w2.show()

#3. 建立一個隐藏标題欄的視窗,并置頂
w3 = QWidget()
w3.setWindowFlags(Qt.CustomizeWindowHint|Qt.WindowStaysOnTopHint)
w3.move(400,400)
w3.show()

sys.exit(app.exec_())
           

程式運作如下所示:

pyQt5 學習筆記(8)視窗标志位一、視窗标志位二、視窗标志的使用

第一個視窗:最普通的視窗,可以最大化,最小化,可以移動,可以關閉,也可以設定大小

第二個視窗:禁止使用者改變大小的視窗,可以看到最大化按鍵變成灰色,也無法通過拖拽邊緣來改變大小

第三個視窗:沒有标題欄,無法移動,改變大小等

第四個視窗:隐藏标題欄并且置頂,可以改變大小,但是無法移動

可以發現,

setWindowFlags()

函數是通過或符号“|”來分隔多個視窗标志的,測試過程中發現,不少參數在

setWindowFlags()

中有效,但是在

setWindowFlag()

是無效的,是以這類建議使用

setWindowFlags()

來設定視窗标志位。

關于更多的視窗标志位,可以檢視Qt官方文檔:視窗标志位

3. 應用:通過滑鼠點選顯示和影藏邊框

這一小節實作一個簡單的功能,建立一個普通的視窗,通過點選滑鼠左鍵可以顯示邊框,通過點選滑鼠右鍵,可以隐藏邊框。其代碼如下所示:

from PyQt5.Qt import *
import sys

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("視窗移動")
        self.resize(300, 200)
        self.show()

    def mousePressEvent(self, evt):
        # 滑鼠按鍵為左鍵
        if(evt.button() == Qt.LeftButton):
            self.setWindowFlags(Qt.FramelessWindowHint)  # 隐藏視窗邊框
            self.show()                                  # 窗體顯示
            print("?鍵,隐藏邊框")

        # 滑鼠按鍵為右鍵
        if(evt.button() == Qt.RightButton):
            self.setWindowFlags(Qt.Widget)               # 恢複視窗邊框
            self.show()                                  # 窗體顯示
            print("?鍵,顯示邊框")


app = QApplication(sys.argv)

w = MyWindow()

if __name__ == '__main__':
    sys.exit(app.exec_())
           

其運作效果如下所示:

pyQt5 學習筆記(8)視窗标志位一、視窗标志位二、視窗标志的使用

注意,每一次改變視窗标志以後,需要使用

show()

來重新整理顯示視窗,否則視窗會消失。