【PyQt学习篇 · ⑧】:QWidget - 窗口特定操作

文章目录

  • 图标
  • 标题
  • 不透明度
  • 窗口状态
  • 最大化和最小化
  • 窗口标志
  • 案例

图标

  1. setWindowIcon(QIcon("resource/header_icon.png")):该函数用于设置QWidget的窗口图标。可以为窗口设置一个图标,以显示在窗口标题栏、任务栏或窗口管理器中。

  2. windowIcon():该函数用于获取已设置的QWidget的窗口图标。如果在此QWidget上设置了窗口图标,则返回一个QIcon对象,可以在需要的地方进一步使用。

代码演示:

在这里插入图片描述
将以上图片作为窗口图标:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
import sys

app = QApplication(sys.argv)

window = QWidget()
window.resize(200, 200)

window.setWindowIcon(QIcon('mouse.png'))
print(window.windowIcon())  # 打印QIcon对象

window.show()
sys.exit(app.exec_())

运行结果:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

标题

  1. setWindowTitle(title):该函数用于设置QWidget的窗口标题。您可以使用该函数将自定义的标题文本设置给QWidget,这个标题文本将会显示在窗口的标题栏上。

  2. windowTitle():该函数用于获取QWidget的窗口标题。如果在此QWidget上设置了窗口标题,则返回该标题文本的字符串。

在之前的文章中已有相关介绍,在这里就不展开描述。

不透明度

  1. setWindowOpacity(float):该函数用于设置QWidget的窗口透明度。参数float的范围是从0.0(完全透明)到1.0(完全不透明)。通过调整窗口的透明度,您可以创建半透明或不透明的窗口效果。

  2. windowOpacity():该函数用于获取QWidget的窗口透明度。如果在此QWidget上设置了窗口透明度,则返回其当前的透明度值。

代码演示:

from PyQt5.QtWidgets import *
import sys

app = QApplication(sys.argv)

window = QWidget()
window.resize(300, 300)

window.setWindowOpacity(0.5)	# 设置窗口为半透明
print(window.windowOpacity())   # 打印窗口透明值

window.show()
sys.exit(app.exec_())

运行结果:

在这里插入图片描述
在这里插入图片描述

窗口状态

  1. setWindowState(state):该函数用于设置QWidget的窗口状态。参数state可以是以下值之一:

    • Qt.WindowNoState:没有任何特殊状态,窗口以正常方式显示。
    • Qt.WindowMinimized:将窗口最小化。
    • Qt.WindowMaximized:将窗口最大化。
    • Qt.WindowFullScreen:将窗口设置为全屏模式。
    • Qt.WindowActive:将窗口设置为活动状态(在多个窗口中切换焦点)。
  2. windowState():该函数用于获取QWidget的窗口状态。返回一个表示当前窗口状态的整数值。

对以上窗口的不同状态进行演示,主要代码:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys

app = QApplication(sys.argv)

window = QWidget()
window.resize(300, 300)

window.show()

##### 测试代码 ####

##### 测试代码 ####

sys.exit(app.exec_())

后续的代码演示将在测试代码区内进行编写。

  • Qt.WindowNoState演示,窗口的默认状态等同于无状态
print(window.windowState() == Qt.WindowNoState)	# 打印状态比较结果

运行结果:

在这里插入图片描述

  • Qt.WindowMinimized窗口最小化演示
window.setWindowState(Qt.WindowMinimized)

运行结果:
运行后窗口编程最小化,在电脑任务栏上显示

在这里插入图片描述

  • Qt.WindowMaximized窗口最大化演示
window.setWindowState(Qt.WindowMaximized)

运行结果:
在这里插入图片描述

  • Qt.WindowFullScreen窗口全屏演示
window.setWindowState(Qt.WindowFullScreen)

运行结果:
窗口电脑全屏显示

在这里插入图片描述

  • Qt.WindowActive窗口活跃演示
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys

app = QApplication(sys.argv)

w1 = QWidget()
w1.resize(500, 500)
w1.setWindowTitle('w1')

w2 = QWidget()
w2.resize(300, 300)
w2.setWindowTitle('w2')

w1.show()
w2.show()

w1.setWindowState(Qt.WindowActive)	# 将w1设置为活跃状态
sys.exit(app.exec_())

运行结果:
将w1设置为活跃状态后,就会优先显示,等同于将窗口变为顶层。

在这里插入图片描述

最大化和最小化

用于控制窗口的最大化、最小化和全屏状态的API:

  1. showFullScreen():该函数用于将QWidget窗口设置为全屏模式。窗口将占据整个屏幕空间,并隐藏任务栏和标题栏。

  2. showMaximized():该函数用于将QWidget窗口最大化显示。窗口将会填充整个屏幕,但保留标题栏和边框。

  3. showMinimized():该函数用于将QWidget窗口最小化显示。窗口将被隐藏到任务栏或系统托盘。

  4. showNormal():该函数用于将QWidget窗口还原为正常状态。如果窗口当前处于最大化、最小化或全屏状态,调用此函数将使其恢复到普通的可调整大小的窗口。

用于判断窗口的最大化、最小化和全屏状态的API:

  1. isMinimized():该函数用于判断QWidget窗口是否处于最小化状态。

  2. isMaximized():该函数用于判断QWidget窗口是否处于最大化状态。

  3. isFullScreen():该函数用于判断QWidget窗口是否处于全屏模式。

案例:鼠标点击窗口,实现最大化和正常状态切换。

案例代码:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys

class Window(QWidget):
    def mousePressEvent(self, QMouseEvent):
        if QMouseEvent.button() == Qt.LeftButton:
            if self.isMaximized():  # 如果窗口为最大化
                self.showNormal()

            else:
                self.showMaximized()    # 将窗口设置为最大化

if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = Window()
    window.resize(300, 300)
    window.show()

    sys.exit(app.exec_())

运行结果:
鼠标点击一次,窗口变最大化

在这里插入图片描述
鼠标再点击一次,窗口变回正常大小:

在这里插入图片描述

窗口标志

在PyQt中,QWindow提供了一系列的窗口标志(Window Flags)用于控制其窗口的行为和特性,以下是其中一些常用的API:

  1. setWindowFlags(flags):该函数用于设置QWidget窗口的窗口标志。参数flags是一个整数值,用于指定要设置的窗口标志,可以使用逻辑运算符(位或操作|)将多个标志组合起来。例如,使用Qt.WindowStaysOnTopHint标志可以让窗口一直保持在顶部。

    • 窗口样式:

    • Qt.Widget:该样式创建一个普通的窗口控件,没有标题栏和边框。

    • Qt.Window:该样式创建一个具有标题栏和边框的窗口控件。

    • Qt.Dialog:该样式创建一个对话框式的窗口控件,通常用于显示对话框等。

    • Qt.Sheet:该样式创建一个对话框式的窗口控件,从父窗口顶部边界向下滑入。

    • Qt.Drawer:该样式创建一个侧边栏式的窗口控件,从屏幕左侧滑入。

    • Qt.Popup:该样式创建一个弹出式的窗口控件,通常用于显示菜单等。

    • Qt.Tool:该样式创建一个类似于工具栏的窗口控件。

    • Qt.ToolTip:该样式创建一个提示框窗口控件,通常用于显示鼠标悬停时的提示信息。

    • Qt.SplashScreen:该样式创建一个用于显示启动画面的窗口控件。

    • Qt.SubWindow:该样式创建一个子窗口控件,通常用于在父窗口内部显示其他窗口。

    • 顶层窗口外观标志:

    • Qt.MSWindowsFixedSizeDialogHint:该标志创建一个具有固定大小的窗口,且不允许调整窗口大小和拖曳窗口位置。

    • Qt.FramelessWindowHint:该标志创建一个无边框的窗口,通常用于创建自定义的窗口外观。

    • Qt.CustomizeWindowHint:该标志创建一个允许用户自定义窗口的窗口,一般用于在窗口标题栏中提供菜单选项。

    • Qt.WindowTitleHint:该标志创建一个具有标题栏的窗口。

    • Qt.WindowSystemMenuHint:该标志创建一个在窗口标题栏中提供系统菜单的窗口。

    • Qt.WindowMaximizeButtonHint:该标志创建一个具有最大化按钮的窗口。

    • Qt.WindowMinimizeButtonHint:该标志创建一个具有最小化按钮的窗口。

    • Qt.WindowMinMaxButtonsHint:该标志创建一个同时具有最小化和最大化按钮的窗口。

    • Qt.WindowCloseButtonHint:该标志创建一个具有关闭按钮的窗口。

    • Qt.WindowContextHelpButtonHint:该标志创建一个在窗口标题栏中提供上下文帮助按钮的窗口。

    • Qt.WindowStaysOnTopHint:该标志创建一个始终在顶层的窗口,即使失去焦点也会在其他窗口上方显示。

    • Qt.WindowStaysOnBottomHint:该标志创建一个始终在底层的窗口,即使获取焦点也不会在其他窗口之上显示。

  2. windowFlags():该函数用于获取QWidget窗口的当前窗口标志。返回一个表示当前窗口标志的整数值。

案例

案例:创建一个窗口,要求如下。

  • 无边框无标题栏
  • 窗口半透明
  • 自定义最小化、最大化、关闭按钮
  • 支持拖拽用户区移动

案例代码:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys

class Window(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.resize(300, 300)
        self.setWindowTitle('案例')

        self.setWindowFlag(Qt.FramelessWindowHint)  # 将窗口设置为无边框无标题栏
        self.setWindowOpacity(0.5)  # 设置窗口为半透明
        self.Mouse_Flag = False     # 设置鼠标跟踪开关

        # 设置窗口的大小
        self.btu_width = 80
        self.btu_height = 40

        self.setup_ui()

    def setup_ui(self):
        # 设置三个按钮分别为最小化、最大化、关闭
        self.btu1 = QPushButton(self)
        self.btu1.setText('关闭')
        self.btu1.resize(self.btu_width, self.btu_height)
        # self.btu1.move(self.width() - self.btu_width, 0)     # 将关闭移动到窗口最右边
        self.btu1.pressed.connect(self.WindowClose)

        self.btu2 = QPushButton(self)
        self.btu2.setText('最大化')
        self.btu2.resize(self.btu_width, self.btu_height)
        # self.btu2.move(self.width() - self.btu_width*2, 0)
        self.btu2.pressed.connect(self.WindowMaximized)

        self.btu3 = QPushButton(self)
        self.btu3.setText('最小化')
        self.btu3.resize(self.btu_width, self.btu_height)
        # self.btu3.move(self.width() - self.btu_width*3, 0)
        self.btu3.pressed.connect(self.WindowMinimized)

    # 窗口大小改变事件
    def resizeEvent(self, QResizeEvent):
        self.btu1.move(self.width() - self.btu_width, 0)
        self.btu2.move(self.width() - self.btu_width * 2, 0)
        self.btu3.move(self.width() - self.btu_width * 3, 0)

    # 点击关闭的事件
    def WindowClose(self):
        self.close()

    # 点击窗口最小化时的事件
    def WindowMinimized(self):
        self.showMinimized()

    # 点击窗口最大化时的事件
    def WindowMaximized(self):
        if self.isMaximized():
            self.showNormal()
            self.btu2.setText('最大化')

        else:
            self.showMaximized()
            self.btu2.setText('恢复')
    
    # 鼠标点击控件,移动窗口
    def mousePressEvent(self, QMouseEvent):
        if QMouseEvent.button() == Qt.LeftButton:
            self.Mouse_Flag = True

            # 获取鼠标的位置
            self.mouse_x = QMouseEvent.globalX()
            self.mouse_y = QMouseEvent.globalY()

            # 获取窗口左上角的位置
            self.origin_x = self.x()
            self.origin_y = self.y()

    def mouseMoveEvent(self, QMouseEvent):
        if self.Mouse_Flag == True:
            self.move(self.origin_x+(QMouseEvent.globalX() - self.mouse_x), self.origin_y+(QMouseEvent.globalY() - self.mouse_y))

    def mouseReleaseEvent(self, QMouseEvent):
        self.Mouse_Flag = False


if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())

运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/109991.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

识别flink的反压源头

背景 flink中最常见的问题就是反压,这种情况下我们要正确的识别导致反压的真正的源头,本文就简单看下如何正确识别反压的源头 反压的源头 首先我们必须意识到现实中轻微的反压是没有必要去优化的,因为这种情况下是由于偶尔的流量峰值,Task…

Linux 音频驱动实验

目录 音频接口简介为何需要音频编解码芯片?WM8960 简介I2S 总线接口I.MX6ULL SAI 简介 硬件原理图分析音频驱动使能修改设备树使能内核的WM8960 驱动alsa-lib 移植alsa-utils 移植 声卡设置与测试amixer 使用方法音乐播放测试MIC 录音测试LINE IN 录音测试 开机自动…

论文范文:论基于架构的软件设计方法及应用

注意:范文只适用于帮助大家打开写作思路,并不能作为素材直接用于平时练习、考试中。考试中直接使用范文的素材,会有被认定为雷同卷的风险。 摘要: 2022年4月,本人所在单位计划研发生态集装箱管理控制平台项目。该平台主要用于与现有公司生态集装箱产品做对接,达到远程控制…

【Leetcode】【简单】13. 罗马数字转整数

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/roman-to-integer/description/ …

用图说话——流程图进阶

目录 一、基本流程图 二、时序流程图 一、基本流程图 经常阅读歪果仁绘制的流程图,感觉比较规范,自己在工作中也尝试用他们思维来绘图,这是一个小栗子: 二、时序流程图 在进行Detail设计过程中,一般的绘图软件显得…

【Xilinx Kintex-7 Virtex-7 LVDS bank电压】

各种介绍很多,也都写的似乎很长很详细,但有错误。 详细的查阅Xilinx 论坛 43989 核心 总结一下就是Xilinx 7serious 的FPGA ,你如果要配置成LVDS,这的LVDS是正儿八经的那种,那么FPGA 这块你只需要记住两点就可以。 第一,假如你…

开放式耳机推荐排行榜、开放式耳机性价比推荐

随着无线耳机越来越普及,人们对于耳机的要求也越来越高。传统的入耳式耳机虽然音质好,但是长时间佩戴容易引起耳部不适,甚至可能导致听力损失。为此大家都开始选择入手舒适、安全的开放式耳机,现在耳机市场,各种品牌、…

脚本木马编写

PHP小马编写 小马用waf扫描,没扫描出来有风险。 小马过waf之后用echo $_SERVER[DOCUMENT_ROOT]获得当前运行脚本所在的文档根目录。,然后在上传大马工具。 $_SERVER,参考:PHP $_SERVER详解 小马编写二次加密 现在是可以被安全…

98. 验证二叉搜索树

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 解题思路: 二叉搜索树的定义: 二叉搜索树或者是一颗空树,或者是具有如下性质的二叉树: 若它的左子树不空,则左子树上…

OpenCV官方教程中文版 —— Hough 直线变换

OpenCV官方教程中文版 —— Hough 直线变换 前言一、原理二、OpenCV 中的霍夫变换三、Probabilistic Hough Transform 前言 目标 • 理解霍夫变换的概念 • 学习如何在一张图片中检测直线 • 学习函数:cv2.HoughLines(),cv2.HoughLinesP() 一、原理…

C++ priority_queue 的使用

1. priority_queue 的介绍 下面是 priority_queue 的介绍,来自于:🏹priority_queue - C Reference (cplusplus.com) 的中文翻译,您可以尝试看看。 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一…

实战 | 记一次红队打的逻辑漏洞

八月初参加某市演练时遇到一个典型的逻辑漏洞,可以绕过验证码并且重置任意用户的密码。 首先访问页面,用户名处输入账号会回显用户名称,输入admin会回显系统管理员。(hvv的时候蓝队响应太快了,刚把admin的权限拿到了&a…

视频无痕去水印怎么去,这三个神器轻松去除

视频无痕去水印怎么去?各位小伙伴在初学剪视频的时候是不是和我一样经常会碰到一个烦人的问题:在网上找到的视频素材总是带着讨厌的水印,不仅影响美观还挡住了视频的一些部分,让人特别不爽,我想各位遇到这种情况的时候…

框架安全-CVE 漏洞复现DjangoFlaskNode.jsJQuery框架漏洞复现

目录 服务攻防-框架安全&CVE复现&Django&Flask&Node.JS&JQuery漏洞复现中间件列表介绍常见语言开发框架Python开发框架安全-Django&Flask漏洞复现Django开发框架漏洞复现CVE-2019-14234(Django JSONField/HStoreField SQL注入漏洞&#xff…

安装虚拟机(VMware)保姆级教程及配置虚拟网络编辑器和安装WindowsServer以及宿主机访问虚拟机和配置服务器环境

目录 一、操作系统 1.1.什么是操作系统 1.2.常见操作系统 1.3.个人版本和服务器版本的区别 1.4.Linux的各个版本 二、VMware Wworkstation Pro虚拟机的安装 1.下载与安装 注意:VMWare虚拟网卡 2.配置虚拟网络编辑器 三、安装配置 WindowsServer 1.创建虚拟…

AS/400-物理文件-02

物理文件 - Physical file Physical file物理文件中的条目级别相关命令 Physical file 简介物理文件 这是一个文件。包含预定义的结构化格式的数据。它是PF类型。通过使用CRTPF命令创建PF。PF中包含的字段的最大数量为8000。最多包含120个关键字段。 PF 的结构如下 TYPE SPECIF…

题目描述:输入数字,第一行为数组的大小,第二行为数组的值。求其中相邻两个数字相差不大于8的最大片段的长度。

题目描述: 输入数字,第一行为数组的大小,第二行为数组的值。求其中相邻两个数字相差不大于8的最大片段的长度。 示例1: 输入:91 2 4 6 12 2 8 6 4 输出:5示例2: 输入:101 4 5 6 2…

分布式:一文吃透分布式锁,Redis/Zookeeper/MySQL实现

目录 一、项目准备spring项目数据库 二、传统锁演示超卖现象使用JVM锁解决超卖解决方案JVM失效场景 使用一个SQL解决超卖使用mysql悲观锁解决超卖使用mysql乐观锁解决超卖四种锁比较Redis乐观锁集成Redis超卖现象redis乐观锁解决超卖 三、分布式锁概述四、Redis分布式锁实现方案…

干货!数字IC后端入门学习笔记

很多同学想要了解IC后端,今天大家分享了数字IC后端的学习入门笔记,供大家学习参考。 很多人对于后端设计的概念比较模糊,需要做什么也都不甚清楚。 有的同学认为就是跑跑 flow、掌握各类工具。 事实上,后端设计的工作远不止于此。…

状态模式-对象状态及其转换

某信用卡业务系统,银行账户存在3种状态,且在不同状态下存在不同的行为: 1)正常状态(余额大等于0),用户可以存款也可以取款; 2)透支状态(余额小于0且大于-20…