文章目录
- 图标
- 标题
- 不透明度
- 窗口状态
- 最大化和最小化
- 窗口标志
- 案例
图标
-
setWindowIcon(QIcon("resource/header_icon.png"))
:该函数用于设置QWidget的窗口图标。可以为窗口设置一个图标,以显示在窗口标题栏、任务栏或窗口管理器中。 -
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_())
运行结果:
标题
-
setWindowTitle(title)
:该函数用于设置QWidget的窗口标题。您可以使用该函数将自定义的标题文本设置给QWidget,这个标题文本将会显示在窗口的标题栏上。 -
windowTitle()
:该函数用于获取QWidget的窗口标题。如果在此QWidget上设置了窗口标题,则返回该标题文本的字符串。
在之前的文章中已有相关介绍,在这里就不展开描述。
不透明度
-
setWindowOpacity(float)
:该函数用于设置QWidget的窗口透明度。参数float的范围是从0.0(完全透明)到1.0(完全不透明)。通过调整窗口的透明度,您可以创建半透明或不透明的窗口效果。 -
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_())
运行结果:
窗口状态
-
setWindowState(state)
:该函数用于设置QWidget的窗口状态。参数state可以是以下值之一:- Qt.WindowNoState:没有任何特殊状态,窗口以正常方式显示。
- Qt.WindowMinimized:将窗口最小化。
- Qt.WindowMaximized:将窗口最大化。
- Qt.WindowFullScreen:将窗口设置为全屏模式。
- Qt.WindowActive:将窗口设置为活动状态(在多个窗口中切换焦点)。
-
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:
-
showFullScreen()
:该函数用于将QWidget窗口设置为全屏模式。窗口将占据整个屏幕空间,并隐藏任务栏和标题栏。 -
showMaximized()
:该函数用于将QWidget窗口最大化显示。窗口将会填充整个屏幕,但保留标题栏和边框。 -
showMinimized()
:该函数用于将QWidget窗口最小化显示。窗口将被隐藏到任务栏或系统托盘。 -
showNormal()
:该函数用于将QWidget窗口还原为正常状态。如果窗口当前处于最大化、最小化或全屏状态,调用此函数将使其恢复到普通的可调整大小的窗口。
用于判断窗口的最大化、最小化和全屏状态的API:
-
isMinimized()
:该函数用于判断QWidget窗口是否处于最小化状态。 -
isMaximized()
:该函数用于判断QWidget窗口是否处于最大化状态。 -
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:
-
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
:该标志创建一个始终在底层的窗口,即使获取焦点也不会在其他窗口之上显示。
-
-
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_())
运行结果: