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

news2024/11/16 1:52:02

文章目录

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

图标

  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_())

运行结果:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全面解析:oa系统是什么?有哪些好用的oa系统

oa系统是什么?有哪些好用的oa系统 一、什么是OA系统 OA系统全称为Office Automation,即办公自动化系统。它是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、流程管理、知识管理(档案和业务管理&am…

视频剪辑软件Corel VideoStudio Ultimate 会声会影2024中文旗舰版免费下载安装步骤

我喜欢视频剪辑软件Corel VideoStudio Ultimate 会声会影2024中文旗舰版,因为它使用起来很有趣。它很容易使用,但仍然给你很多功能和力量。VideoStudio让我与世界分享我的想法!“这个产品的功能非常多,我几乎没有触及它的表面&…

分布式系统之CAP理论

1. CAP 概念 CAP 概念指的是分布式系统中的三个核心属性:一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)。CAP 定理由计算机科学家 Eric Brewer 在 2000 年提出&…

keealived安装配置启动

1.keepalived作用和原理图 keepalived作用:解决单点故障简单原理图1: 2.keepalived安装配置启动 地址: https://www.keepalived.org/download.html# 1)解压 tar -zxvf keepalived-2.0.18.tar.gz # 2)进入keepalived目录 cd keepalived-2.0.18/ # 3)安装libnl/libnl-3依赖…

系统架构设计之云原生架构

云原生架构 一. 云原生技术介绍二. 传统架构模式 VS 云原生架构模式三. 云原生架构反模式四. 云原生架构设计原则 其它相关推荐: 软考系统架构之案例篇(架构设计相关概念) 系统架构之微服务架构 系统架构设计之微内核架构 鸿蒙操作系统架构 所属专栏:系统…

Tomcat简介 安装 站点部署 多实例配置 反向代理

一、Tomcat简介二 、Tomcat帮手 --- JDK安装jdk检查jdk是否安装成功 三.安装TomcatTomcat配置管理页面 四、web站点部署五、部署开源站点(jspgou商城)安装数据库 六、 jspgou商城上线配置数据库连接 七、Tomcat多实例配置复制程序文件浏览器访问 八、Tom…

3D LUT 滤镜 shader 源码分析

最近在做滤镜相关的渲染学习,目前大部分 LUT 滤镜代码实现都是参考由 GPUImage 提供的 LookupFilter 的逻辑,整个代码实现不多。参考网上的博文也有各种解释,参考了大量博文之后终于理解了,所以自己重新整理了一份,方便…

RT-Smart 开发笔记:int 类型数值溢出造成的奇怪问题的分析与排查记录

前言 最近在调试 RT-Smart 上的用户态 mq(消息队列)时,遇到一个奇怪的问题,这个例程打印了一下获取的时间,就可以正常的工作(超时退出),否则,就一直卡住(无法…

10.27~10.29数电第三次实验分析与问题

实验要求 分析 寄存器 D触发器有两个输出口,一个输入口,一个时钟信号,一个复位信号 同步异步就是说复位信号在不在always里 给它加一个load就成了一位寄存器, 寄存器堆 8个8位的寄存器堆,每个寄存器都有两读一写…

Zynq-Linux移植学习笔记之64- 国产ZYNQ在linux下配置国产5396芯片

1、背景介绍 复旦微ZYNQ通过SPI配置国产JEM5396,框图如下: 现在需要在linux下的应用程序内配置JEM5396的寄存器。其中FMQL和进口的XILINX ZYNQ类似,JEM5396和进口的BCM5396兼容。因此可以参考进口ZYNQ在linux下配置BCM5396过程。Zynq-Linux移…

【Java 进阶篇】Java HTTP响应消息详解

在Web开发中,HTTP(Hypertext Transfer Protocol)是一种用于传输数据的协议,它用于浏览器和Web服务器之间的通信。当你在浏览器中访问一个网页时,浏览器向Web服务器发送HTTP请求,然后Web服务器返回HTTP响应。…

YOLOv8如何添加注意力模块?

分为两种:有参注意力和无参注意力。 eg: 有参: import torch from torch import nnclass EMA(nn.Module):def __init__(self, channels, factor8):super(EMA, self).__init__()self.groups factorassert channels // self.groups > 0self.softmax …

CondaError_ Downloaded bytes did not match Content-Length

问题 使用anaconda下载包文件时,出现了CondaError: Downloaded bytes did not match Content-Length的错误 CondaError: Downloaded bytes did not match Content-Lengthurl: https://conda.anaconda.org/pytorch/win-64/pytorch-2.1.0-py3.11_cuda11.8_cudnn8_0.…

二维码智慧门牌管理系统升级,打造高效事件处理流程

文章目录 前言一、二维码智慧门牌管理系统的升级目标二、事件处理流程优化三、升级带来的好处 前言 随着城市化的不断推进,城市管理面临越来越多的挑战。为了更好地解决这些问题,许多城市已经开始采用二维码智慧门牌管理系统。这个系统不仅可以提高城市…

操作系统第一章-第三章大题_期末考试_详细易考

1.ABC三道作业如下表所示: 作业输入CPU输出A1505050B10060100C806050 (1) 计算在单道环境下运行时CPU的利用率;(2分) (2) 假设计算机系统中具有一个CPU、三个通道,画出ABC三道作业并发执行的情况图,并计算CPU利用率。(12分) 问题分析: c p u 利用率 c p u 有效…

Python对象(Object)与类型(Type)的关系

Object与Type 1、Object与Type概述2、Object与Type的关系 1、Object与Type概述 对象(Object)和类型(Type)是Python中两个最最基本的概念,它们是构筑Python语言大厦的基石 所有的数据类型,值,变…

[BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn

再补完这个就基本上完了. crypto RSA Variation II Schmidt-Samoa密码系统看上去很像RSA,其中Npqq, 给的eN给了d from secret import flag from Crypto.Util.number import *p getPrime(1024) q getPrime(1024)N p*p*qd inverse(N, (p-1)*(q-1)//GCD(p-1, q-1))m bytes…

cause: java.lang.numberformatexception: for input string

一个十分粗心的错误 我本来想要写的是name不为空,并且不为空字符串,结果不小心写成了空格! 解决方案:将空格改为空字符串即可

JMeter的使用——傻瓜式学习【中】

目录 前言 1、JMeter参数化 1.1、什么是参数化 1.2、用户定义的变量 1.2.1、什么时候使用用户定义的变量 1.2.2、使用“用户定义的变量”进行参数化的步骤: 1.2.3、案例 1.3、用户参数 1.3.1、什么时候使用用户参数? 1.3.2、使用“用户参数”进…

交叉编译工具链(以STM32MP1为例)

1.什么是交叉编译工具链? 在一个系统上进行编译,在另一个系统上进行执行 2.STM32MP1交叉编译工具链 3.交叉编译器内容 4.两种工具链模式 5.两种链接模式 6.工具使用 注意:OpenSTLinux已经提供了编译框架,不需要命令行手工编译 …