pyQt5 学习笔记(8)窗口标志位

一、窗口标志位

在pyQt中,对于没有父控件的控件,会自动添加标题栏,我们称之为“窗口”,一下代码创建了一个QWidget控件:

from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)

w1 = QWidget()
w1.show()

sys.exit(app.exec_())

由于其没有父控件,所以自动添加标题栏,称为一个窗口:
在这里插入图片描述
可以看到,程序没有指定大小,图标,标题名称,所以以上均有程序默认样式。这是一个最基本,常见的窗口,但是一些时候,我们并不需要一个这样的窗口,比如,在弹出的提示对话框中,可能只需要一个关闭按钮,一些特殊的窗口是禁止用户改变其大小的,以及当我们要自定义标题栏的时候,就需要影藏默认的标题栏…这一些都可以通过窗口标志(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_())

程序运行如下所示:
在这里插入图片描述
第一个窗口:最普通的窗口,可以最大化,最小化,可以移动,可以关闭,也可以设置大小
第二个窗口:禁止用户改变大小的窗口,可以看到最大化按键变成灰色,也无法通过拖拽边缘来改变大小
第三个窗口:没有标题栏,无法移动,改变大小等
第四个窗口:隐藏标题栏并且置顶,可以改变大小,但是无法移动

可以发现,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_())

其运行效果如下所示:
在这里插入图片描述
注意,每一次改变窗口标志以后,需要使用show()来刷新显示窗口,否则窗口会消失。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值