看完這篇文章你會得到的成果圖
之前內容的重點複習 (前情提要)
我們接下來的討論,會基於讀者已經先讀過我 day5 文章 的架構下去進行程式設計
如果還不清楚我程式設計的邏輯 (UI.py、controller.py、start.py 分別在幹麻)
建議先閱讀 day5 文章後再來閱讀此文。
【PyQt5】Day 5 – 開始來設計我們的 controller.py,改以「程式角度」來說明如何建立 PyQt 的系統
此篇文章的範例程式碼 github
視窗的個性化控制 setWindowFlags
這篇文章我們要來討論 PyQt 裡面一個很酷的東西,setWindowFlags,
我們主要要討論的功能都是未來我會用到的功能。
在 setWindowFlags 裡面有很多的定義,
其中有幾個我會用到
顯示於最上層/最下層
- Qt.WindowStaysOnTopHint: 視窗永遠在最上層,適合互動性高的程式
- Qt.WindowStaysOnBottomHint: 視窗永遠在最下層,適合背景程式
關於放大/縮小的設定
當我們沒有特別設定參數時,只繼承 「QDialog」 的視窗預設都只會有關閉按鈕。
如果是繼承自 「QWidget」,則縮小、放大、關閉按鈕都會有。
- Qt.WindowMinimizeButtonHint: 顯示最小化按鈕
- Qt.WindowMaximizeButtonHint: 顯示最大化按鈕
- Qt.WindowMinMaxButtonsHint: 顯示最小化按鈕和最大化按鈕
- Qt.WindowCloseButtonHint: 顯示關閉按鈕
這些功能都定義在 PyQt5.QtCore 中,記得要 import !!!
from PyQt5.QtCore import *
搭配上述的使用範例
我們就可以用以下的設定方式,來對視窗做一些特別的控制
- 只有縮小/關閉 (取消放大)
- Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint
- 只有放大/關閉 (取消縮小)
- Qt.WindowMaximizeButtonHint | Qt.WindowCloseButtonHint
- 只有關閉 (取消放大縮小)
- Qt.WindowCloseButtonHint
範例
我們先透過 Qtdesinger 隨便建立一份 UI 介面
並如同之前的方式,建立一個可直接執行的 UI.py
轉換 day22.ui -> UI.py
pyuic5 -x day22.ui -o UI.py
直接打開觀察目前的視窗
我們可以發現目前的視窗中,放大/縮小/關閉的功能都是有的。
觀察目前的程式碼
打開 UI.py,我們發現我們的視窗果然是繼承於「QWidget」
所以預設是縮小、放大、關閉按鈕都會有。
self.centralwidget = QtWidgets.QWidget(MainWindow)
嘗試修改視窗屬性
# 只有縮小/關閉 (取消放大)
MainWindow.setWindowFlags(Qt.WindowMinimizeButtonHint | Qt.Window