当前位置: 首页 > news >正文

【Python-GUI图形化界面-PyQt5模块(3)】——Qwidget核心模块

 本文旨在带大家学习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)
作用解释(这个需要自己理解图片表达不出来):

QWidgetQWidget 是 PyQt 或 PySide 中用于创建各种控件和窗口的基类。

·flags=Qt.DialogQt.Dialog 是一个窗口标志,指定窗口为对话框类型。带有 Qt.Dialog 标志的窗口通常表现为弹出对话框,具有以下特点:

·独立性:对话框会作为一个独立窗口弹出,不同于工具窗口,它通常用于获取用户的输入或提供重要信息。

·焦点管理:对话框在打开时,通常会捕获用户的焦点(特别是模态对话框),这意味着在用户处理完对话框之前,无法与其他窗口进行交互。

·显示方式:对话框通常比主窗口小,且不会显示在任务栏上(除非显式设置)。

对话框常用于警告、设置、文件选择器等交互界面。

常见的使用场景:

·确认操作:例如,在删除文件时,弹出一个模态对话框,要求用户确认操作。

·填写表单:如果需要用户完成一个表单,或者填写一些必须的信息,模态对话框可以确保他们在提交之前不能继续其他操作。

·警告和错误:模态对话框常用于显示重要的警告或错误信息,确保用户在解决问题之前无法继续使用主窗口。

总结:

·模态对话框:会阻塞主窗口的交互,用户必须先完成对话框中的操作(如点击确定或关闭)才能返回主窗口。这在要求强制用户处理某个问题、确认操作或提供必要输入时非常有效。

·非模态对话框:用户可以自由切换到其他窗口,适合不那么紧急的任务,如辅助工具窗口或调试信息。

模态对话框的调用方法是 exec_(),这样主窗口会被“锁定”直到对话框被关闭。

Qt.SplashScreen 将窗口设置为启动时显示的加载界面
# 将窗口设置为启动时显示的加载界面
w = QWidget(flags= Qt.SplashScreen)
效果-(代码示例):

使用 Qt.SplashScreen 标志创建 QWidget 会创建一个启动画面窗口,通常用于应用程序启动时显示临时信息或加载进度。启动画面窗口通常是没有窗口边框的,并且在启动期间不允许与应用程序进行交互。

作用解释:

  1. QWidgetQWidget 是 PyQt 或 PySide 中用于创建控件和窗口的基类。
  2. flags=Qt.SplashScreenQt.SplashScreen 标志用于创建启动画面(Splash Screen)。这个窗口通常会在应用程序加载时显示公司标志、版本号、加载进度等,等应用加载完成后自动关闭。

启动画面的特点:

  • 无边框:没有标题栏、边框、或系统窗口控件(如最小化、最大化、关闭按钮)。
  • 短暂显示:通常在应用程序启动时显示,等应用加载完成后自动关闭。
  • 无交互:启动画面不接受用户的输入,也不会出现在任务栏中。

启动画面的常见用法:

  1. 显示应用程序的标志、名称或版本号。
  2. 在应用程序加载过程中展示状态或进度信息。
from PyQt5.QtWidgets import QApplication, QSplashScreen
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap
import timeapp = 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_()

解释:

  • QSplashScreenQSplashScreen 是一个专门用于显示启动画面的类,比直接使用 QWidget 更常见和方便。
  • pixmapQPixmap 是一个图像对象,用于在启动画面中显示图像。
  • show():显示启动画面。
  • time.sleep(3):模拟启动延迟(实际应用中,你可以在这里进行初始化工作,比如加载资源、数据库连接等)。

·close():启动画面结束后自动关闭。

注意:

如果你只是想显示一个临时的、无边框的窗口,那么 Qt.SplashScreen 是非常适合的。如果你需要更复杂的交互,则应该选择其他窗口类型。

Qt.Popup 将窗口设置为弹出窗口,通常用于右键菜单或提示框。
#将窗口设置为弹出窗口,通常用于右键菜单或提示框。
w = QWidget(flags= Qt.Popup)
效果:

作用解释:

  1. QWidget:这是 PyQt 或 PySide 中用于创建控件和窗口的基类。
  2. flags=Qt.PopupQt.Popup 是一个窗口标志,它指定窗口为弹出窗口。这种类型的窗口通常会在特定事件(例如点击按钮、右键菜单等)时显示,并且具有以下特点:
    • 无边框:弹出窗口通常没有标题栏和系统窗口控件(如最小化、最大化、关闭按钮)。
    • 自动关闭:当用户点击窗口外部的区域时,弹出窗口会自动关闭。
    • 临时窗口:这种窗口是临时显示的,适用于上下文菜单、工具提示等短时间展示的内容。

示例场景:

  • 右键上下文菜单。
  • 工具提示(tooltip)。
  • 自定义的弹出式输入框、选择框。

示例代码:

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
from PyQt5.QtCore import Qtapp = 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 sysapp = 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 sysapp = 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. 用户输入反馈:实时更新标题显示用户正在操作的数据(如搜索结果、当前选择的文件名等)。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Django项目配置日志
  • 【重学 MySQL】四十、SQL 语句执行过程
  • ArrayList源码实现(一)
  • 重头开始嵌入式第四十三天(硬件 ARM架构 汇编语言)
  • 【数据结构】点分治 点分树
  • 基于二分查找的动态规划 leetcode 300.最长递增子序列(续)
  • 即插即用篇 | DenseNet卷土重来! YOLOv8 引入全新密集连接卷积网络 | ECCV 2024
  • 修改系统显示大小修改系统屏幕密度
  • Ansible集群服务部署案例
  • 前台项目启动/打包报错 Error: error:0308010C:digital envelope routines::unsupported
  • 【2】图像视频的加载和显示
  • 从准备面试八股文,感悟到技术的本质
  • 工具介绍---效率高+实用
  • 立体仓库WCS功能设计:物流自动化的智能核心
  • Superset二次开发之Git篇git fetch 异常信息汇总
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Angularjs之国际化
  • JAVA_NIO系列——Channel和Buffer详解
  • JSDuck 与 AngularJS 融合技巧
  • Js基础知识(一) - 变量
  • js中forEach回调同异步问题
  • QQ浏览器x5内核的兼容性问题
  • REST架构的思考
  • 回顾 Swift 多平台移植进度 #2
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端之React实战:创建跨平台的项目架构
  • 设计模式走一遍---观察者模式
  • 深度学习入门:10门免费线上课程推荐
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 思维导图—你不知道的JavaScript中卷
  • 做一名精致的JavaScripter 01:JavaScript简介
  • Android开发者必备:推荐一款助力开发的开源APP
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • ######## golang各章节终篇索引 ########
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (done) 声音信号处理基础知识(2) (重点知识:pitch)(Sound Waveforms)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (面试必看!)锁策略
  • (一)appium-desktop定位元素原理
  • (转)winform之ListView
  • (转)可以带来幸福的一本书
  • (转)我也是一只IT小小鸟
  • .bashrc在哪里,alias妙用
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划