橙子的PyQt5学习笔记_PyQt5 GUI程序的基本结构

这篇博客介绍了PyQt5 GUI程序的基本结构,包括QApplication和QMainWindow的作用。QApplication负责初始化参数、事件循环,而QMainWindow是功能齐全的顶层窗口类。此外,文章讨论了控件展示、程序结束以及编码风格遵循PEP8的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PyQt5 GUI程序的基本结构

Qt GUI程序最好以面向对象的形式来写,面向对象的优势这里就不啰嗦了,还有一个原因是QtDesigner设计的UI文件转成python文件后,也是以类的形式组织的
Qt GUI 程序的大致结构像下面这样:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel


class MyWindow(QMainWindow):
	def __init__(self):
		# 调用父类的构造方法
		super().__init__()
		# 调用构建子控件的方法
		self.setup_ui()

	def setup_ui(self):
		"负责构建子控件"
		# 创建一个标签对象
		label = QLabel(self)
		# 设置标签展示的文本
		label.setText("Hello World")

if __name__ == "__mian__":
	# 实例化一个QApplication对象
	app = QApplication(sys.argv)
	# 实例化自定义的窗口类
	win = MyWindow()
	# 展示窗口
	win.show()
	# 启动事件循环,并将退出码传递给系统退出方法
	sys.exit(app.exec_())

一些应该了解的额外知识

关于QApplication

app = QApplication(sys.argv)

这里实例化了一个QApplication对象
这个对象就像一个幕后工作者,主要作用有:

  1. 根据系统桌面环境初始化一些参数,比如字体,色彩等等,并能够跟踪系统参数的改变
  2. 开启事件循环,将事件循环中的事件分发给对应的接受者(对应的控件)
  3. 接收命令行参数(sys.argv),根据其设置应用的运行方式
  4. 定义应用的外观,并能够在运行时更改
  5. 提供国际化解决方案
  6. 提供对一些神奇的工具的使用(比如桌面,剪贴板等等)
  7. 能够集体操控应用内的所有窗口(比如关闭所有窗口closeAllWindows())
  8. 处理鼠标指针

关于QMainWindow

class MyWindow(QMainWindow):

这里我们定制了一个继承自QMainWindow的类
在老师的课程里,一直是让MyWindow类继承自QWidget类的
实际上QWidget只不过是一个空白的矩形控件而已
当一个控件没有父控件时,系统会自动为它添加标题栏和边框,使它成为一个顶层窗口
但是它也仅仅拥有这两样东西而已
QMainWindow则不同,它是一个专门作为顶层窗口使用的类
除了系统自动添加的标题栏和边框之外,QMainWindow还拥有菜单栏,工具栏,状态栏等区域
这里引用一个官网的图片:
在这里插入图片描述
正因为它功能齐全,所以我习惯用它

关于控件的展示

win.show()

这行代码是让窗口控件展示出来,也就是绘制在屏幕上,让用户看到
在Qt中,一个没有父控件的控件,是不会自动展示的,需要调用show()方法(或者类似的方法)来展示
如果一个控件有父控件,默认情况下,它会随着父控件的展示而展示(除非它本身设置了隐藏)
换句话说,一个控件展示的时候,会将它的非隐藏的子控件一起展示出来
所以这里仅仅win调用了show()方法,而label并没有调用show()方法

关于结束程序

sys.exit(app.exec_())

这里app.exec_()会开启一个事件循环,负责扫描事件队列中的消息
当程序的顶层窗口被关闭时(或者程序退出时),此方法返回程序的退出码,0为正常退出,非0则为异常退出
然后再将退出码传递给python系统的退出方法,即汇报退出状态

关于编码风格

之前我学习的时候都是使用IDLE的,最近学习PyQt5,因为老师使用的是pycharm,所以我也跟着用了
用了之后才发现,真的比IDLE好用太多,而且它也会提示一些编码风格的问题(根据PEP8),比如

  1. 导入语句与下面的类之间要留两个空行
  2. 函数或方法之间要留一个空行
  3. 所有成员变量应该在初始化函数中定义
  4. 方法名应该小写
  5. 写完最后一行应该按下回车,并将缩进删除(删到光标顶在行首)

曾经去粗略浏览了一下PEP8的网站,条目太多了,实在没有耐心看下去,像现在这样根据pycharm的提示来修改代码也挺不错的,目前只发现了这些问题,也许以后还有更多

关于本文

本文是橙子的学习笔记,学习的是王顺子老师的PyQt5视频课程,在网易云课堂买的,把老师课上讲的知识点结合官网的讲解,汇总到一起再发出来,希望能够给新人们一些参考,不过因为橙子还是小白一个,所以难免会有很多错误和不足,还请各路大神不吝赐教,谢谢啦!(人参第一帖完成,撒花!!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值