本文旨在带大家学习Python中的一种GUI图形化界面模块——PyQt5模块,将为大家详细了解PyQt5模块中函数的参数和使用:
一、PyQt5简介
PyQt是Qt框架的Python语言实现,由Riverbank Computing开发,是最强大的GUI库之一。
官方网站:www.riverbankcomputing.com
核心模块—QWidget创建基础窗口和布局
一、QWidget 目录导航
QWidget是所有 UI 元素的基类,提供了基础的窗口和布局功能。
show():显示窗口或小部件。
hide():隐藏窗口或小部件。
close():关闭窗口或小部件。
resize(width, height):调整窗口或小部件的大小。
setWindowTitle(title):设置窗口的标题。
setGeometry(x, y, width, height):设置窗口的位置和大小。
二、QWidget:是所有 UI 元素的基类,提供了基础的窗口和布局功能。
w = QWidgei() 创建应用程序实例
在PyQt或PySide框架中,QWidget 是所有用户界面对象的基类,它继承自QObject和QPaintDevice。这个类提供了一个容器,可以用来放置其他用户界面控件(如按钮、标签、输入框等),并且可以自定义绘制内容。
QWidgei() 完整签名:
QWidget(parent=None, flags=Qt.WindowFlags())
基本用法:
windows = QWidget()
# 创建一个QWidget对象,它是窗口的根节点,也是整个窗口的主部分。
形参列表:
主要形参:
形参名 | 类型 | 形参解释/基本用法 |
parent(父控件) | 类型: QWidget 或 None,默认None | 作用: 指定这个控件的父控件。如果设置了父控件,该控件将被嵌入到父控件内,作为子控件存在。若父控件销毁时,子控件也会被销毁。通常用于将一个控件放在另一个控件内。例如,把按钮放到一个窗口内。 |
flags(窗口标志) | 类型: Qt.WindowFlags(整数位标志) 默认值: Qt.WindowFlags() | 作用: 设置窗口的行为或外观。例如,可以控制窗口是否有标题栏、是否是工具窗口、是否无边框等。这个标志用于定义窗口的显示方式,可以组合多个标志一起使用。 |
parent 参数示例(父控件设置): 这个示例展示如何使用QWidget并设置父控件。我们创建一个主窗口,并在其中嵌入一个子控件。
# 创建主窗口
main_window = QWidget()
main_window.setWindowTitle("主窗口")
# 创建子控件 (按钮),并指定 main_window 作为它的父控件
button = QPushButton("点击我", parent=main_window)
flags 参数示例(窗口标志设置): 下面是使用flags设置窗口的示例,将窗口设置为无边框的工具窗口。
tool_window = QWidget(flags=Qt.Tool | Qt.FramelessWindowHint)
tool_window.setWindowTitle("工具窗口")
效果:
此时窗口局域栏的 比如 “最小化”、“最大化”、“关闭”“窗口标题”等按钮则不见了;
(忽略下面按钮和文字,为了演示添加的,现在可以不用管,下面我来解释每个设置窗口的外观)
参数:
flags 参数 | 参数解释 |
Qt.Tool | 窗口不会出现在任务栏上(除非明确设置)。 |
Qt.FramelessWindowHint | 无边框的工具窗口。(上面已举例) |
Qt.WindowMinimizeButtonHint | 为窗口添加最小化按钮。 |
Qt.WindowMaximizeButtonHint | 为窗口添加最大化按钮。 |
Qt.WindowCloseButtonHint | 为窗口添加关闭按钮(默认情况下,Windows系统会自动提供这个功能,但其他系统可能需要手动设置)。 |
Qt.Dialog | 将窗口设置为对话框。 |
Qt.SplashScreen | 将窗口设置为启动时显示的加载界面,通常用于展示启动动画或品牌Logo。 |
Qt.Popup | 将窗口设置为弹出窗口,通常用于右键菜单或提示框。 |
参数总结:
· parent 参数用于指定父控件,常用于层级结构的UI布局。
· flags 参数用于控制窗口的行为和外观,例如无边框、工具窗口等。
示例:
·parent 参数示例(父控件设置): 上面已有示例!基本参数就那些!!
·flags 参数示例(窗口标志设置):
flags参数可以组合多个标志来实现复杂的窗口行为。除了Qt.Tool和Qt.FramelessWindowHint,还有很多有用的标志可以探索:
(下面我将参数都列出来,并包含解释,然后看效果)
效果示例:
Qt.Tool 窗口不会出现在任务栏上(除非明确设置)。
# 窗口不会出现在任务栏上(除非明确设置)。
w = QWidget(flags=Qt. Tool)
效果:
可以看到任务栏并没有我们的python窗口
设置成别的参数之后任务栏正常显示我们的窗口;所以默认是显示任务栏图标的;
Qt.FramelessWindowHint 无边框的工具窗口。
# 无边框的工具窗口。(上面已举例)
w = QWidget(flags=Qt.FramelessWindowHint)
效果:
可以看到我们的窗口没有边框
Qt.WindowMinimizeButtonHint 为窗口添加最小化按钮。
#为窗口添加最小化按钮。
w = QWidget(flags=Qt.WindowMinimizeButtonHint)
效果:
可以看到我们添加了最小化的按钮,此时最大化和关闭按钮是(灰色)无法使用的;
Qt.WindowMaximizeButtonHint 为窗口添加最大化按钮。
# 为窗口添加最大化按钮。
w = QWidget(flags=Qt. Qt.WindowMaximizeButtonHint)
效果:
添加最大化按钮:此时最大化按钮可用
Qt.WindowCloseButtonHint 为窗口添加关闭按钮
# 为窗口添加关闭按钮
w = QWidget(flags= Qt.WindowCloseButtonHint)
效果:
添加关闭按钮:此时可以点击按钮关闭程序;
Qt.Dialog 将窗口设置为对话框
# 将窗口设置为对话框
w = QWidget(flags=Qt.Dialog)
作用解释(这个需要自己理解图片表达不出来):
QWidget
:QWidget
是 PyQt 或 PySide 中用于创建各种控件和窗口的基类。
·
flags=Qt.Dialog
:Qt.Dialog
是一个窗口标志,指定窗口为对话框类型。带有 Qt.Dialog
标志的窗口通常表现为弹出对话框,具有以下特点:
·独立性:对话框会作为一个独立窗口弹出,不同于工具窗口,它通常用于获取用户的输入或提供重要信息。
·焦点管理:对话框在打开时,通常会捕获用户的焦点(特别是模态对话框),这意味着在用户处理完对话框之前,无法与其他窗口进行交互。
·显示方式:对话框通常比主窗口小,且不会显示在任务栏上(除非显式设置)。
对话框常用于警告、设置、文件选择器等交互界面。
常见的使用场景:
·确认操作:例如,在删除文件时,弹出一个模态对话框,要求用户确认操作。
·填写表单:如果需要用户完成一个表单,或者填写一些必须的信息,模态对话框可以确保他们在提交之前不能继续其他操作。
·警告和错误:模态对话框常用于显示重要的警告或错误信息,确保用户在解决问题之前无法继续使用主窗口。
总结:
·模态对话框:会阻塞主窗口的交互,用户必须先完成对话框中的操作(如点击确定或关闭)才能返回主窗口。这在要求强制用户处理某个问题、确认操作或提供必要输入时非常有效。
·非模态对话框:用户可以自由切换到其他窗口,适合不那么紧急的任务,如辅助工具窗口或调试信息。
模态对话框的调用方法是 exec_()
,这样主窗口会被“锁定”直到对话框被关闭。
Qt.SplashScreen 将窗口设置为启动时显示的加载界面
# 将窗口设置为启动时显示的加载界面
w = QWidget(flags= Qt.SplashScreen)
效果-(代码示例):
使用 Qt.SplashScreen
标志创建 QWidget
会创建一个启动画面窗口,通常用于应用程序启动时显示临时信息或加载进度。启动画面窗口通常是没有窗口边框的,并且在启动期间不允许与应用程序进行交互。
作用解释:
QWidget
:QWidget
是 PyQt 或 PySide 中用于创建控件和窗口的基类。flags=Qt.SplashScreen
:Qt.SplashScreen
标志用于创建启动画面(Splash Screen)。这个窗口通常会在应用程序加载时显示公司标志、版本号、加载进度等,等应用加载完成后自动关闭。
启动画面的特点:
- 无边框:没有标题栏、边框、或系统窗口控件(如最小化、最大化、关闭按钮)。
- 短暂显示:通常在应用程序启动时显示,等应用加载完成后自动关闭。
- 无交互:启动画面不接受用户的输入,也不会出现在任务栏中。
启动画面的常见用法:
- 显示应用程序的标志、名称或版本号。
- 在应用程序加载过程中展示状态或进度信息。
from PyQt5.QtWidgets import QApplication, QSplashScreen
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap
import time
app = QApplication([])
# 创建启动画面(使用 QSplashScreen 而不是 QWidget)
pixmap = QPixmap("logo.png") # 假设有一个名为 'logo.png' 的图片
splash = QSplashScreen(pixmap, Qt.SplashScreen)
# 显示启动画面
splash.show()
# 模拟加载过程(例如,应用程序启动期间的初始化)
time.sleep(3) # 模拟启动延迟
# 关闭启动画面
splash.close()
# 进入应用的主窗口(这里可以加载主窗口)
# main_window = MainWindow()
# main_window.show()
app.exec_()
解释:
QSplashScreen
:QSplashScreen
是一个专门用于显示启动画面的类,比直接使用QWidget
更常见和方便。pixmap
:QPixmap
是一个图像对象,用于在启动画面中显示图像。show()
:显示启动画面。time.sleep(3)
:模拟启动延迟(实际应用中,你可以在这里进行初始化工作,比如加载资源、数据库连接等)。
·
close()
:启动画面结束后自动关闭。
注意:
如果你只是想显示一个临时的、无边框的窗口,那么 Qt.SplashScreen
是非常适合的。如果你需要更复杂的交互,则应该选择其他窗口类型。
Qt.Popup 将窗口设置为弹出窗口,通常用于右键菜单或提示框。
#将窗口设置为弹出窗口,通常用于右键菜单或提示框。
w = QWidget(flags= Qt.Popup)
效果:
作用解释:
QWidget
:这是 PyQt 或 PySide 中用于创建控件和窗口的基类。flags=Qt.Popup
:Qt.Popup
是一个窗口标志,它指定窗口为弹出窗口。这种类型的窗口通常会在特定事件(例如点击按钮、右键菜单等)时显示,并且具有以下特点:- 无边框:弹出窗口通常没有标题栏和系统窗口控件(如最小化、最大化、关闭按钮)。
- 自动关闭:当用户点击窗口外部的区域时,弹出窗口会自动关闭。
- 临时窗口:这种窗口是临时显示的,适用于上下文菜单、工具提示等短时间展示的内容。
示例场景:
- 右键上下文菜单。
- 工具提示(tooltip)。
- 自定义的弹出式输入框、选择框。
示例代码:
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
from PyQt5.QtCore import Qt
app = QApplication([])
# 创建弹出窗口
popup = QWidget(flags=Qt.Popup)
popup.setWindowTitle("弹出窗口")
# 设置弹出窗口的布局和内容
layout = QVBoxLayout()
button = QPushButton("点击我关闭")
button.clicked.connect(popup.close) # 点击按钮关闭弹出窗口
layout.addWidget(button)
popup.setLayout(layout)
# 设置窗口大小和显示位置
popup.resize(200, 100)
popup.move(300, 300) # 设置弹出窗口的位置
popup.show() # 显示为弹出窗口
app.exec_()
内容拓展总结。
QtWidgets 提供了丰富的小部件和方法,用于构建复杂的用户界面。常用的小部件包括按钮 (QPushButton)、标签 (QLabel)、文本框 (QLineEdit) 和布局类 (QVBoxLayout, QHBoxLayout) 等,每个小部件都有相应的方法用于管理其行为和外观。
三、SHOW():显示窗口或小部件。
show() 方法属于 QWidget 类,用于将窗口小部件显示在屏幕上。
show() 完整签名:
注意:show() 没有任何形参,它直接将小部件显示出来,因此你不需要传递任何参数。
基本用法:
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('基本 show() 示例')
# 显示窗口
window.show()
形参列表:
主要形参:
show() 没有任何形参,它直接将小部件显示出来,因此你不需要传递任何参数。
示例:
from PyQt5.QtWidgets import QApplication, QWidget
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('基本 show() 示例')
# 显示窗口
window.show()
sys.exit(app.exec_())
拓展应用总结:
·show() 可以结合 Qt 信号槽机制进行动态界面更新。
· 通过在不同的事件(如按钮点击、键盘按下)中调用 show(),可以让 GUI 的元素根据用户交互动态地显示或隐藏。
·结合 resize()、move() 等方法,可以改变窗口或控件的大小和位置。
四、hide():隐藏窗口或小部件。
hide() 方法与 show() 相对,用于隐藏小部件或窗口。它属于 QWidget 类。
HIDE() 完整签名:
和 show() 一样,hide() 也没有任何形参,调用它后,窗口或控件将被隐藏。
基本用法:
# 显示窗口
window.show()、
形参列表:
无
主要形参:
show() 没有任何形参,它直接将小部件显示出来,因此你不需要传递任何参数。
示例:
from PyQt5.QtWidgets import QApplication, QPushButton, QWidget
import sys
app = QApplication(sys.argv)
# 创建主窗口
window = QWidget()
window.setWindowTitle('hide() 示例')
# 创建一个按钮
button = QPushButton("Hide Me", window)
# 点击按钮后隐藏按钮
button.clicked.connect(button.hide)
# 显示窗口
window.show()
# 运行应用程序主循环
sys.exit(app.exec_())
解释:
当用户点击按钮时,button.hide() 方法被调用,按钮将从界面上消失。
拓展应用总结:
·hide() 方法用于隐藏窗口或控件,与 show() 相对。
·常与 show() 结合使用,用于动态控制界面元素的显示与隐藏。
·没有参数,调用后直接隐藏指定的控件或窗口。
五、close():关闭窗口或小部件。
close() 方法属于 QWidget 类,用于关闭窗口或控件。当调用该方法时,目标窗口或控件会被销毁。
Close() 完整签名:
bool close()
基本用法:
button.clicked.connect(window.close)
主要形参:
返回值:
True:如果窗口成功关闭,则返回 True。
False:如果窗口拒绝关闭(比如在 closeEvent 中取消了关闭动作),则返回 False。
示例:
from PyQt5.QtWidgets import QApplication, QPushButton, QWidget
import sys
# 初始化应用程序
app = QApplication(sys.argv)
# 创建主窗口
window = QWidget()
window.setWindowTitle('close() 示例')
# 创建按钮
button = QPushButton("Close Window", window)
# 点击按钮后关闭窗口
button.clicked.connect(window.close)
# 显示窗口
window.show()
# 运行应用程序主循环
sys.exit(app.exec_())
解释:
点击按钮时,调用 window.close(),主窗口将关闭,并退出程序。
拓展应用总结:
六、Resize()设置窗口或部件的大小
resize() 方法属于 QWidget 类,用于设置窗口或控件的大小(宽度和高度)。通过调用 resize() 方法,你可以指定控件或窗口的宽度和高度。
resize() 完整签名:
void resize(int width, int height);
基本用法:
button.clicked.connect(window.close)
主要形参:
形参名 | 解释 |
Width | 窗口或控件的宽度(整数,像素为单位)。 |
Height | 窗口或控件的高度(整数,像素为单位)。 |
示例:
from PyQt5.QtWidgets import QApplication, QWidget
import sys
# 初始化应用程序
app = QApplication(sys.argv)
# 创建窗口
window = QWidget()
window.setWindowTitle('resize() 示例')
# 调整窗口大小为 400x300 像素
window.resize(400, 300)
# 显示窗口
window.show()
# 运行应用程序主循环
sys.exit(app.exec_())
解释:
window.resize(400, 300):将窗口的宽度设置为 400 像素,高度设置为 300 像素。
调用 resize() 时,你可以自定义控件或窗口的大小,这通常用于窗口初始化或在运行时调整界面的布局。
拓展应用总结:
拓展应用场景:
响应式布局:在应用程序中,可以根据用户交互(例如调整控件内容或用户输入)来自动调整窗口或控件的大小。
自适应界面:有时需要根据内容自动调整控件的大小,例如动态表单、输入框等,可以在适当的时机调用 resize()
来调整布局。
最小和最大窗口大小限制:结合 setMinimumSize()
和 setMaximumSize()
可以进一步控制窗口的最小和最大大小。
七、setWindowsTitle()设置窗口的标题
setWindowTitle() 是 PyQt5 中用于设置窗口标题的正确方法。以下是详细的说明。
setWindowsTitle() 完整签名:
void setWindowTitle(const QString &title);
基本用法:
w.setWindowTitle('flags 参数示例(窗口标志设置)')
# 设置窗口的标题为"Simple"。
主要形参:
形参名 | 解释 |
Title | 字符串类型(QString),表示窗口的标题文本,将显示在窗口的标题栏中。你可以传入任意有效的字符串内容。 |
示例:根据 按钮点击更改窗口标题
from PyQt5.QtWidgets import QApplication, QPushButton, QWidget, QVBoxLayout
import sys
# 初始化应用程序
app = QApplication(sys.argv)
# 创建窗口
window = QWidget()
window.setWindowTitle('Initial Title') # 设置初始标题
# 创建布局
layout = QVBoxLayout()
# 创建按钮
button = QPushButton('Change Window Title')
# 定义按钮点击后的操作,更新窗口标题
def change_title():
window.setWindowTitle('Title Changed!')
# 连接按钮点击信号到函数
button.clicked.connect(change_title)
# 将按钮添加到布局中
layout.addWidget(button)
window.setLayout(layout)
# 显示窗口
window.show()
# 运行应用程序主循环
sys.exit(app.exec_())
在这个示例中,用户点击按钮后窗口标题会发生变化。
扩展应用总结:
1. 动态反馈:你可以根据应用的不同状态(如加载进度、文件名等)动态更新窗口标题,提供更好的用户反馈。
2. 多窗口应用:在多窗口应用中,通过标题可以帮助用户区分不同的窗口内容(例如当前打开的文档名)。
3. 用户输入反馈:实时更新标题显示用户正在操作的数据(如搜索结果、当前选择的文件名等)。