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

文章目录

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

图标

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

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

代码演示:

【PyQt学习篇 · ⑧】:QWidget - 窗口特定操作_第1张图片
将以上图片作为窗口图标:

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

运行结果:

【PyQt学习篇 · ⑧】:QWidget - 窗口特定操作_第2张图片

【PyQt学习篇 · ⑧】:QWidget - 窗口特定操作_第3张图片

在这里插入图片描述

标题

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

运行结果:

【PyQt学习篇 · ⑧】:QWidget - 窗口特定操作_第4张图片
在这里插入图片描述

窗口状态

  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)

运行结果:
【PyQt学习篇 · ⑧】:QWidget - 窗口特定操作_第5张图片

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

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

【PyQt学习篇 · ⑧】:QWidget - 窗口特定操作_第6张图片

  • 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设置为活跃状态后,就会优先显示,等同于将窗口变为顶层。

【PyQt学习篇 · ⑧】:QWidget - 窗口特定操作_第7张图片

最大化和最小化

用于控制窗口的最大化、最小化和全屏状态的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学习篇 · ⑧】:QWidget - 窗口特定操作_第8张图片
鼠标再点击一次,窗口变回正常大小:

【PyQt学习篇 · ⑧】:QWidget - 窗口特定操作_第9张图片

窗口标志

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

运行结果:

【PyQt学习篇 · ⑧】:QWidget - 窗口特定操作_第10张图片

你可能感兴趣的:(PyQt5从入门到精通,pyqt,python)