Note: 在PyQt5窗口创建完成后,可以在Qt Designer设计器中通过属性对窗口进行设置,表中列出了PyQt5窗口常用的一些属性及说明。

PyQt5窗口的常用属性及说明


常 用 属 性说    明
objectName窗口的唯一标识,程序通过该属性调用窗口
geometry该属性中可以设置窗口的宽度和高度
windowTitle标题栏文本
windowIcon窗口的标题栏图标
windowOpacity窗口的透明度,取值范围为0~1
windowModality窗口样式,可选值有NonModal、WindowModal和ApplicationModal
enabled窗口是否可用
mininumSize窗口最小化时的大小,默认为0×0
maximumSize窗口最大化时的大小,默认为16777215×16777215
palette窗口的调色板,可以用来设置窗口的背景
font设置窗口的字体,包括字体名称、字体大小、是否为粗体、是否为斜体、是否有下划线、是否有删除线等
cursor窗口的鼠标样式
contextMenuPolicy窗口的快捷菜单样式
acceptDrops是否接受拖放操作
toolTip窗口的提示文本
toolTipDuration窗口提示文本的显示间隔
statusTip窗口的状态提示
whatsThis窗口的“这是什么”提示
layoutDirection窗口的布局方式,可选值有LeftToRight、RightToLeft和LayoutDirectionAuto
autoFillBackground是否自动填充背景
styleSheet设置窗口样式,可以用来设置窗口的背景
locale窗口的国际化设置
iconSize窗口标题栏图标的大小
toolButtonStyle窗口中的工具栏样式,默认值为ToolButtonIconOnly,表示默认工具栏中只显示图标,用户可以更改为只显示文本,或者同时显示文本和图标
dockOptions停靠选项
unifiedTitleAndToolBarOnMac在Mac OS系统中是否可以定义标题和工具栏

1  基本属性设置


窗口包含一些基本的组成要素,包括对象名称、图标、标题、位置和背景等,这些要素可以通过窗口中的属性编辑器窗口进行设置,也可以通过代码来实现。下面详细介绍窗口的常见属性设置。

1)设置窗口的对象名称

窗口的对象名称,相当于窗口的标识,是唯一的,在编写代码时,对窗口的任何设置和使用都是通过该名称进行操作的。在Qt Designer设计器中,窗口的对象名称是通过属性编辑器中的objectName属性进行设置的,默认名称为MainWindow,如图所示,用户可以根据实际情况进行更改,但要保证在当前窗口中是唯一的。

Pasted image 20250827102315

除了可以在Qt Designer设计器的属性编辑器中对其进行修改之外,还可以通过Python代码进行设置,设置时需要使用setObjectName()函数,使用方法如下:

MainWindow.setObjectName("MainWindow")

2)设置窗口的标题栏名称

在窗口的属性中,通过windowTitle属性设置窗口的标题栏名称,标题栏名称就是显示在窗口标题上的文本,windowTitle属性设置及窗口标题栏的预览效果分别如下图所示。

Pasted image 20250827102651

Pasted image 20250827102751

在Python中使用setWindowTitle()函数也可以设置窗口标题栏,代码如下:

MainWindow.setWindowTitle(_translate("MainWindow","标题栏"))

3)修改窗口的大小

在窗口的属性中,通过展开geometry属性,可以设置窗口的大小。修改窗口的大小,只需更改宽度和高度的值即可,如图所示。

Pasted image 20250827102955

Info: 说明 在设置窗口的大小时,其值只能是整数,不能是小数。

在Python中使用resize()函数也可以设置窗口的大小,代码如下:

MainWindow.resize(252, 100)

Tip: 多学两招 PyQt5窗口运行时,默认居中显示在屏幕中,如果想自定义PyQt5窗口的显示位置,可以根据窗口大小和屏幕大小来进行设置。其中,窗口的大小使用geometry()方法即可获取,而获取屏幕大小可以使用QDesktopWidget类中的screenGeometry()方法QDesktopWidget类是PyQt5中提供的一个与屏幕相关的类,其screenGeometry()方法用来获取屏幕的大小。例如,下面代码用来获取当前屏幕的大小(包括宽度和高度):

from PyQt5.QtWidgets import QDesktopWidget  # 导入屏幕类  
screen=QDesktopWidget().screenGeometry()    # 获取屏幕大小  
width=screen.width()                        # 获取屏幕的宽  
height=screen.height()                      # 获取屏幕的高

2  更换窗口的图标


添加一个新的窗口后,窗口的图标是系统默认的QT图标。如果想更换窗口的图标,可以在属性编辑器中设置窗口的windowIcon属性,窗口的系统默认图标和更换后的新图标如图所示。

Pasted image 20250827104048

更换窗口图标的过程非常简单,具体操作如下:

1)选中窗口,然后在属性编辑器中选中windowIcon属性,这时会出现下拉按钮,如图所示。

Pasted image 20250827103738

2)单击下拉按钮,在下拉列表中选择选择文件菜单项,如图所示。

Pasted image 20250827103828

3)弹出选择一个像素映射对话框,该对话框中选择新的图标文件,单击打开按钮,即可将选择的图标文件作为窗口的图标,如图所示。

Pasted image 20250827103942

通过上面的方式修改窗口图标后对应的Python代码如下:

icon = QtGui.QIcon()  
icon.addPixmap(QtGui.QPixmap(r"D:\CodeFile\Python_Code\PyQt5\UI\Couioly头像.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)  
MainWindow.setWindowIcon(icon)

Tip: 多学两招 通过上面的代码可以看出,在使用选择图标文件的方式设置窗口图标时,使用的是图标的绝对路径,这样做的缺点是,如果其他用户在使用你的程序时,没有上面的路径,就会无法正常显示图标,那么如何解决该问题呢?可以将要使用的图标文件复制到项目的目录下,如图所示。

Pasted image 20250827104434

这时就可以直接通过图标文件名进行使用,上面的代码可以更改为如下:

icon = QtGui.QIcon()    
icon.addPixmap(QtGui.QPixmap("Couioly头像.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)    
MainWindow.setWindowIcon(icon)

3  设置窗口的背景


为了使窗口设计更加得美观,通常会设置窗口的背景样式,在PyQt5中设置窗口的背景有3种常用的方法,下面分别介绍。

1)使用setStyleSheet()函数设置窗口背景

在使用setStyleSheet()函数设置窗口背景时,需要以background-color或者border-image的方式来进行设置,其中background-color可以设置窗口的背景颜色;而border-image可以设置窗口的背景图片。

使用setStyleSheet()函数置窗口背景颜色的代码如下:

MainWindow.setStyleSheet("#MainWindow{background-color:red}")

运行效果如图所示。

Pasted image 20250827104838

Info: 说明 在使用setStyleSheet()函数设置窗口背景色之后,窗口中的控件会继承窗口的背景色,如果想要为控件设置背景图片或者图标,需要使用setPixmap()或者setIcon()函数来完成。

在使用setStyleSheet()函数设置窗口背景图片时,首先需要包括要作为背景的图片文件,因为代码中需要用到图片的路径,这里将图片文件放在.py文件同一目录层级下的images文件夹中,位置存放位置如图所示。

Pasted image 20250827105822

在存放完图片文件后,接下来就可以使用setStyleSheet()函数设置窗口的背景图片了,代码如下:

MainWindow.setStyleSheet("#MainWindow{border-image:url(images/BG哪吒.png)}")  # 设置背景图片

运行效果如图所示。

Pasted image 20250827110134

Info: 说明 除了在setStyleSheet()函数中使用border-image方式设置窗口的背景图片外,还可以使用background-image方式设置,但这种方式设置的背景图片会平铺显示,代码如下:

# 设置背景图片  
MainWindow.setStyleSheet("#MainWindow{background-image:url(images/BG哪吒.png)}")

使用background-image方式设置的窗口背景图片效果如图所示。

Pasted image 20250827110506

2)使用QPalette设置窗口背景

QPalette类是PyQt5中提供的一个调色板,专门用于管理控件的外观显示,每个窗口和控件都包含一个QPalette对象。通过QPalette对象的setColor()函数可以设置颜色,而通过该对象的setBrush()函数可以设置图片,最后使用MainWindow对象的setPalette()函数即可为窗口设置背景图片或者背景

使用QPalette对象为窗口设置背景颜色的代码如下:

MainWindow.setObjectName("MainWindow")  
palette = QtGui.QPalette()  
palette.setColor(QtGui.QPalette.Background, Qt.red)  
MainWindow.setPalette(palette)

Warning: 注意 使用Qt.red时,需要使用下面的代码导入Qt模块:

from PyQt5.QtCore import Qt

运行效果与使用setStyleSheet()函数设置窗口背景颜色的效果一样,如下图所示。

Pasted image 20250827111304

使用QPalette对象为窗口设置背景图片的代码如下:

# 使用QPalette设置窗口背景图片  
palette = QtGui.QPalette()  
palette.setBrush(QtGui.QPalette.Background, QBrush(QPixmap("./images/BG哪吒.png")))  
MainWindow.setPalette(palette)

Warning: 注意 在上面代码中用到了QBrushQPixmap,因此需要进行导入,代码如下:

from PyQt5.QtGui import QBrush,QPixmap

使用QPalette对象为窗口设置背景图片的效果如图所示。

Pasted image 20250827111658

Tip: 多学两招 观察上图,会发现背景图片没有显示全,这是因为在使用QPalette对象为窗口设置背景图片时,默认是平铺显示的,那么如何使背景图片能够自动适应窗口的大小呢?这就需要在设置背景时,对setBrush()方法中的QPixmap对象参数进行设置,具体设置方法是:在生成QPixmap窗口背景图对象参数时,使用窗口大小QtCore.Qt.IgnoreAspectRatio值和QtCore.Qt.SmoothTransformation值进行设置。关键代码如下:

# 使用QPalette设置窗口背景图片(自动适应窗口大小)

palette = QtGui.QPalette()
palette.setBrush(MainWindow.backgroundRole(), QBrush(QPixmap("./images/BG哪吒.png").scaled(MainWindow.size(), QtCore.Qt.IgnoreAspectRatio,QtCore.Qt.SmoothTransformation)))

MainWindow.setPalette(palette)

运行程序,效果如图所示,对比上图,可以看到下图中的背景图片自动适应了窗口大小。

Pasted image 20250827112506

3)通过资源文件设置窗口背景

除了以上两种设置窗口背景的方式,PyQt5还推荐使用资源文件的方式对窗口背景进行设置,下面介绍具体的实现过程:

1)在Qt Designer创建并使用资源文件,即在Qt Designer工具中设计程序界面时,可以通过资源浏览器添加图片或图标等资源。

2)在Python的项目路径中创建一个名称为images的文件夹,然后将需要测试的图片保存在该文件夹当中,打开Qt Designer工具,在右下角的资源浏览器中单击编辑资源的按钮,如图所示。

Pasted image 20250827113128

3)在弹出的编辑资源对话框中,单击左下角的第一个新建资源文件按钮,如图所示。

Pasted image 20250827113217

4)在新建资源文件的对话框中,选择该资源文件保存的路径为当前Python项目的路径,然后设置文件名称为img,保存类型为资源文件(*.qrc),最后单击保存按钮,如图所示。

Pasted image 20250827113520

5)单击保存按钮后,将自动返回至编辑资源对话框中,然后在该对话框中选择添加前缀按钮,设置前缀为png,再单击添加文件按钮,如图所示。

Pasted image 20250827113910

6)在添加文件的对话框中选择需要添加的图片文件,然后单击打开按钮即可,如图所示。

Pasted image 20250827114006

7)图片添加完成以后,将自动返回至编辑资源的对话框,在该对话框中直接单击OK按钮即可,然后资源浏览器将显示添加的图片资源,如图所示的效果。

Pasted image 20250827114306

Info: 说明 设置的前缀,是自己定义的路径前缀,用于区分不同的资源文件。

8)选中设计窗口,找到styleSheet属性,单击右面的三个点按钮,如图所示。

Pasted image 20250827114455

9)接着弹出编辑样式表对话框,该对话框中,单击添加资源后面的向下箭头,在弹出的菜单中选择border-image,如图所示。

Pasted image 20250827115417

10)然后弹出选择资源对话框,该对话框中选择创建好的资源,单击OK按钮,如图所示。

Pasted image 20250827115530

11)返回编辑样式表对话框,在该对话框中可以看到自动生成的代码,单击OK按钮即可,如图所示。

Pasted image 20250827115613

12)转换资源文件

在Qt Designer中设计好窗口(该窗口中使用了.qrc资源文件)之后,将已经设计好的.ui文件转换为.py文件,但是转换后的.py文件的代码中会显示如图所示的提示信息。

Pasted image 20250827115913

图中的提示信息说明img_rc模块导入出现异常,所以此处需要将已经创建好的img.qrc资源文件转换为.py文件,这样在设计窗口中才可以正常使用,资源文件转换的具体步骤如下:

  • PyQt5-环境搭建 中已搭建好资源文件转化工具Pyrcc,接下来将使用它进行资源文件转化。

Warning: 注意 选择的pyrcc5.exe文件位于Python安装目录下的Scripts文件夹中,如果选择当前项目的虚拟环境路径下的pyrcc5.exe文件,有可能会出现无法转换资源文件的问题,所以这里一定要注意。

  • 转换资源文件的快捷工具创建完成以后,单击鼠标左键选中需要转换的.qrc文件,然后在菜单栏中依次单击Tools → External Tools → Pyrcc菜单,即可在.qrc文件的下面自动生成对应的.py文件,如图所示。

Pasted image 20250827121213

  • 文件转换完以后,提示的报错信息即可消失,然后添加程序入口,并在其中通过MainWindow对象的show()函数来显示主窗口,运行效果如图。

Pasted image 20250827121454

4  控制窗口透明度


窗口透明度是窗口相对于其他界面的透明显示度,默认为不透明,将窗口透明度设置为0.5则可以成为半透明,对比效果如图所示。

Pasted image 20250827135243

控制窗口透明度的具体操作如下:

选中窗口,然后在属性编辑器中设置windowOpacity属性的值即可,如图所示。

Pasted image 20250827135515

Info: 说明 windowOpacity属性的值为0~1之间的数,其中,0表示完全透明;1表示完全不透明。

在Python代码中使用setWindowOpacity()函数也可以设置窗口的透明度,例如,下面的代码将窗口的透明度设置为半透明:

MainWindow.setWindowOpacity(0.5)

5  设置窗口样式


在PyQt5中,使用setWindowFlags()函数设置窗口的样式,该函数的语法如下:

setWindowFlags(Qt.WindowFlags)

Qt.WindowFlags参数表示要设置的窗口样式,它的取值分为两种类型,分别如下:

  • PyQt5的基本窗口类型及说明,如表所示。
参  数  值说    明
Qt.Widget默认窗口,有最大化、最小化和关闭按钮
Qt.Window普通窗口,有最大化、最小化和关闭按钮
Qt.Dialog对话框窗口,有问号(?)和关闭按钮
Qt.Popup无边框的弹出窗口
Qt.ToolTip无边框的提示窗口,没有任务栏
Qt.SplashScreen无边框的闪屏窗口,没有任务栏
Qt.SubWindow子窗口,窗口没有按钮,但有标题

例如,下面代码用来将名称为MainWindow的窗口设置为一个对话框窗口:

# 显示一个有问号(?)和关闭按钮的对话框  
MainWindow.setWindowFlags(QtCore.Qt.Dialog)
  • 自定义顶层窗口外观及说明,如表所示。
参  数  值说    明
Qt.MSWindowsFixedSizeDialogHint无法调整大小的窗口
Qt.FramelessWindowHint无边框窗口
Qt.CustomizeWindowHint有边框但无标题栏和按钮,不能移动和拖动的窗口
Qt.WindowTitleHint添加标题栏和一个关闭按钮的窗口
Qt.WindowSystemMenuHint添加系统目录和一个关闭按钮的窗口
Qt.WindowMaximizeButtonHint激活最大化按钮的窗口
Qt.WindowMinimizeButtonHint激活最小化按钮的窗口
Qt.WindowMinMaxButtonsHint激活最小化和最大化按钮的窗口
Qt.WindowCloseButtonHint添加一个关闭按钮的窗口
Qt.WindowContextHelpButtonHint添加像对话框一样的问号(?)和关闭按钮
Qt.WindowStaysOnTopHint使窗口始终处于顶层位置
Qt.WindowStaysOnBottomHint使窗口始终处于底层位置

例如,下面代码用来设置名称为MainWindow的窗口只有关闭按钮,而没有最大化、最小化按钮:

MainWindow.setWindowFlags(QtCore.Qt.WindowCloseButtonHint)  # 只显示关闭按钮

将窗口设置为对话框窗口和只有关闭按钮的窗口的效果如下图所示。

Pasted image 20250827141328

Warning: 注意 对窗口样式的设置,需要在初始化窗体之后才会起作用,即需要将设置窗口样式的代码放在setupUi()函数之后执行,例如:

MainWindow = QtWidgets.QMainWindow()    # 创建窗体对象

ui = Ui_MainWindow() # 创建PyQt设计的窗体对象
ui.setupUi(MainWindow) # 调用PyQt窗体的方法对窗体对象进行初始化设置
MainWindow.setWindowFlags(QtCore.Qt.WindowCloseButtonHint)# 只显示关闭按钮