【没钱买ps,PyQt自己写】Day 22 - PyQt 视窗的个性化/属性控制 setWindowFlags,禁止放大缩小、永远显示於最上层/最下层

看完这篇文章你会得到的成果图

之前内容的重点复习 (前情提要)

我们接下来的讨论,会基於读者已经先读过我 day5 文章 的架构下去进行程序设计
如果还不清楚我程序设计的逻辑 (UI.py、controller.py、start.py 分别在干麻)
建议先阅读 day5 文章後再来阅读此文。

https://www.wongwonggoods.com/python/pyqt5-5/

此篇文章的范例程序码 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.WindowCloseButtonHint)
# 只有放大/关闭 (取消缩小)
# MainWindow.setWindowFlags(Qt.WindowMaximizeButtonHint | Qt.WindowCloseButtonHint)
# 只有关闭 (取消放大缩小)
# MainWindow.setWindowFlags(Qt.WindowCloseButtonHint)
# 视窗永远在最上层,适合互动性高的程序
# MainWindow.setWindowFlags(Qt.WindowStaysOnTopHint)
# 视窗永远在最下层,适合背景程序
# MainWindow.setWindowFlags(Qt.WindowStaysOnBottomHint)

# 如果要一起使用,记得都要 | 连接在一起,不然後来的会洗掉之前的

结果

例如我们取消放大的功能,结果如下图

  • 注意「右上角」反白的「放大」功能。

注意

如果以上的要一起使用(混用),记得都要 | 连接在一起,不然後来的会洗掉之前的

例如,如果我同时想要"取消放大缩小、只留下关闭",且还要视窗永远在最上层。

我要写

# 只有缩小/关闭 (取消放大)
# 视窗永远在最上层,适合互动性高的程序
MainWindow.setWindowFlags(Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint | Qt.WindowStaysOnTopHint)

不能这样写 (後者会洗掉前者的功能)

# 只有缩小/关闭 (取消放大)
MainWindow.setWindowFlags(Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint)
# 视窗永远在最上层,适合互动性高的程序
MainWindow.setWindowFlags(Qt.WindowStaysOnTopHint)

Reference


★ 本文也同步发於我的个人网站(会有内容目录与显示各个小节,阅读起来更流畅):【PyQt5】Day 22 - PyQt 视窗的个性化/属性控制 setWindowFlags,禁止放大缩小、永远显示於最上层/最下层


<<:  Day 22 - IO Monad

>>:  Day23 Vue 认识Porps(2)

20.MYSQL XOR指令

XOR相较前面的指令,是比较难懂一点,他的意思是两侧条件有一边为1,就回传1,否则都回传0 ...

伸缩自如的Flask [day 20] Docker compose

假设今天有的flask服务要附上能一起使用的DB,可以考虑使用Docker compose这个服务。...

Day 27:语系包在 i 身上-Vue I18n 前置作业

因应国际化的需求,专案决定也要符合 international 的规格,Navbar 右上角的「选择...

自动化测试,让你上班拥有一杯咖啡的时间 | Day 26- 学习 cypress filter 的用法

此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 语法 .filter(select...

Day 14 (Ai)

1.文字工具 (档案12,影片Ps1) 左框 (1)文字工具 (1)文字: a.段落文字:拉框,拉大...