PyQt5程序基本结构分析
填坑之前的第一个pyqt5程序
PyQt5程序基本结构分析
1. 导入需要的包和模块
from PyQt5.Qt import * # 别问为什么这么写,问就是懒,这样做的好处是可以不管什么包都导入,不需要一点点导包,缺点就是占点内存
import sys
# sys是什么
# 我们的代码,到时候的执行方式,1、右击run去执行,2、命令行Python代码名称
# argv:当别人通过命令行启动这个程序的时候,可以设定一种功能(接收命令行传递的参数来执行不同的业务逻辑)
args = sys.argv
print(args)
if args[1] == '1':
print("hello world")
else:
print("hello pyqt")
# exit(退出码),正常退出是0,程序内部错误是其他的错误码,通过传递不同的错误码,可以知道怎么退出的。
sys.exit()
2. 创建一个应用程序对象
app = QApplication(sys.argv)
# 当有很多个文件的时候,想要获取入口文件参数时
print(app.arguments())
print(qApp.arguments()) # qApp是全局变量
3. 控件操作
# 创建控件,设置控件(大小,位置,样式),事件,信号的处理
# 1、创建控件
# 控件创建好后(没有父控件),则把它当作顶层控件(窗口),系统会自动的给窗口添加一些装饰(标题栏),窗口控件具备一些性质(设置标题,图标)
window = QWidget()
# 2、设置控件
window.setWindowTitle("程序基本结构分析") # 设置窗口标题
window.resize(300,150) # 设置窗口尺寸,长宽
w.move(300,300) # 移动窗口(显示时在哪),长高
# 控件也可以作为一个容器承载其他控件
label = QLabel(window)
label.setText('hello world')
lable.move(100,100)
# 3、展示控件
# 刚创建好一个控件后(没父控件),需要手动展示
window.show()
4. 应用程序的执行,进入到消息循环
# 让整个程序开始执行,并且进入到消息循环(无限循环)
# 监测整个程序所接收到的用户交互信息
sys.exit(app.exec_())
关于 if __name__ == '__main__':
这是个Python的语法,name 是当前模块名,当模块被直接运行时模块名为 main 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。
可以用作测试,也可以用作模板,
在pycharm
中,点击setting
,找到Editor
,点击Live Templates
,点击右上角的加号,点击Live Templates
。在Abbreviation
处给它起个名字,后面的Description
写个介绍,下面的Template text
是用来存放代码的地方。
如下图,设置的窗口标题不写标题,写$Title$
,在下方应该写控件的位置写上$CODE$
如下图,在这个位置要写上改为Python,点change就可以
然后,Apply,OK。
如何使用呢。
新建一个文档,输入刚刚写的名字,然后一个回车就神奇的海螺姑娘帮你把代码拿了出来,然后定位在刚刚的title,当把title写完后,一个回车就到了code的位置,特别神奇。
将面向过程的代码改为面向对象版本(可以理解为界面与逻辑分离)
为什么要改???
不是闲的吃屁,而是减少代码量,清除冗余,方便维护。
如何更改嘞
首先思考需要维护的位置,应该是上面写的设置控件的位置。控件的设置又是通过类来完成的,那么只要在类的内部去添加就可以,但是类又是封装好的,长了脑子的都知道不能随便乱动,那么咋整呢。
通过继承去实现,然后通过__init__
方法,再加上super
来继承父类的所有方法,以后就只需要在__init__
方法内部去写设置就可以了。
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
class Window(QWidget):
def __init__(self):
super().__init__()
self.resize(300, 150)
self.move(300, 300)
self.setWindowTitle('第一个基于PyQt5的桌面应用')
self.setup_ui()
def setup_ui(self):
label = QLabel(self)
label.setText('hello world')
label.move(100, 100)
那么,如何去看这个能不能用,只需要用测试就可以,大家都知道的,,Python语法中 if __name__ == '__main__':
这句话通常被用来做测试。
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
使用的时候,只需要在引入时,引入这个文件就可以。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from ui import Window
if __name__ == '__main__':
# 创建一个QApplication类的实例
app = QApplication(sys.argv)
# 创建一个窗口
window = Window()
# 显示窗口
window.show()
# 进入程序主循环,并通过exit函数确保主循环安全结束
sys.exit(app.exec_())
运行结果