找回密码
 会员注册
查看: 28|回复: 0

pythonPyQt5初体验,窗口等组件开发技巧,面向对象方式开发流程实战

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
69864
发表于 2024-9-5 10:55:51 | 显示全部楼层 |阅读模式
✨✨欢迎大家来到景天科技苑✨✨🎈🎈养成好习惯,先赞后看哦~🎈🎈🏆作者简介:景天科技苑🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。🏆《博客》:Python全栈,前后端开发,小程序开发,云原生K8S,人工智能,js逆向,App逆向,网络系统安全,数据分析,PyQt5,tkinter,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,数据库等分享。所属的专栏:PyQt5桌面应用开发,零基础到进阶应用实战景天的主页:景天科技苑文章目录1.PyQt5常用模块常用模块介绍2.PyQt5初体验,显示一个窗口1.使用面向过程的编程方法(1)代码解读(2)PyQt5程序基本结构解析(3)pycahrm激活模板设置2.使用面向对象的编程方法1.PyQt5常用模块所有模块参考官方文档:https://www.riverbankcomputing.com/static/Docs/PyQt5/module_index.html比如我们点进去一个模块QtWidgets进去看一下,里面包含了该模块拥有的所有的类在这里面也可以检索,比如不知道某个类属于哪个模块,可以搜索ctrlF搜索可以看到该类完整的所属路径常用模块介绍QtWidgets包含了一整套UI元素控件,用于建立符合系统风格的界面QtGui涵盖了多种基本图形功能的类(字体,图形,图标,颜色…)QtCore涵盖了包的核心的非GUI功能(时间,文件,目录,数据类型,文本流,链接,线程进程…)QtWebKit浏览器引擎QtTest测试QtSql数据库操作相关QtMultimediaQtMultimediaWidgets多媒体相关对于初学者,我们先直接用Qt模块Qt将基本全部模块中的类综合到一个单一的模块中。好处不用关心哪个模块包含哪些类了坏处很多模块被导入而没有使用,占用内存我们点进去看,Qt模块,基本将常用的模块都导入进来2.PyQt5初体验,显示一个窗口1.使用面向过程的编程方法fromPyQt5.Qtimport*importsys#创建一个应用程序app=QApplication(sys.argv)#创建一个窗口window=QWidget()window.setWindowTitle("景天科技苑")#设置窗口大小window.resize(500,500)#将窗口移动到某个位置,move的参数是x,y轴坐标,单位是像素window.move(400,200)#创建标签,标签控件展示到窗口上,所以将窗口对象传进去label=QLabel(window)#设置标签内容label.setText("HelloJingTian")label.move(200,200)#展示窗口window.show()#开始执行应用程序,并进入消息循环sys.exit(app.exec_())1234567891011121314151617181920212223运行效果展示(1)代码解读一个PyQt程序都需要一个应用程序对象它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。它也处理绝大多数系统范围和应用程序范围的设置。app.exec_()意思是让程序进入主循环,不要停止一个没有父对象控件默认不显示,必须要调用show()才可以一个应用程序中可以显示多个顶级控件如果一个Widget没有父控件,则认定为是顶级控件(顶级窗口)有栏,可以设置图标,有最大化,最小化,关闭等操作如果想要一个控件展示在另外一个控件内部,必须要有父子关系如果两个对象为父子关系,那么父对象显示之后,一般子对象会自动显示(2)PyQt5程序基本结构解析#0.导入需要的包和模块fromPyQt5.Qtimport*#主要包含了我们常用的一些类,汇总到了一块importsys#1.创建一个应用程序对象app=QApplication(sys.argv)#print(app.arguments())#qApp可以从其他模块拿到该模块的app对象,是全局的#print(qApp.arguments())#2.控件的操作#创建控件,设置控件(大小,位置,样式...),事件,信号的处理#2.1创建控件#当我们创建一个控件之后,如果说,这个控件没有父控件,则把它当做顶层控件(窗口)#系统会自动的给窗口添加一些装饰(栏),窗口控件具备一些特性(设置,图标)#QWidget是空白的窗口window=QWidget()#window=QPushButton()#window=QLabel()#2.2设置控件#设置窗口,默认是python,只有顶级控件才可以设置栏的window.setWindowTitle("景天科技苑")#设置窗口大小,注意,设置的空间尺寸大小,不包含上面的栏window.resize(400,400)#控件也可以作为一个容器(承载其他的控件),此时的window就是label的父控件#如果某控件继承父控件,则它会单独生成一个窗口。因此要想程序只显示到一个窗口中,一般只设置一个父控件,其他控件都继承它就行了#这里表示标签控件放在了window控件里面label=QLabel(window)label.setText("JingTian")#子控件无法设置,设置了也不生效#label.setWindowTitle("xxxxxxx")#相对于父控件移动的距离label.move(160,150)#子控件无需调用show方法#label.show()#2.3展示控件#刚创建好一个控件之后,(这个控件没有什么父控件),默认情况下不会被展示,只有手动的调用show()才可以#如果说这个控件,有父控件的,那么一般情况下,父控件展示之后,子控件会自动展示,这里子控件label也展示了window.show()#3.应用程序的执行,进入到消息循环#让整个程序开始执行,并且进入到消息循环(无限循环)#检测整个程序所接收到的用户的交互信息#sys.exit方法传的参数为状态码,表示程序退出时的退出码,0表示正常退出,非零表示异常退出#保证程序不会退出,不然程序会一闪而退。作为GUI程序,用户要在界面操作,肯定不能一闪而退sys.exit(app.exec_())#sys.argv收集命令行参数的#我们的代码,到时候的执行方式,右击,执行2,命令行python代码名称#当别人通过命令行启动这个程序的时候,可以设定一种功能(接收命令行传递的参数,来执行不同的业务逻辑#args=sys.argv#print(args)#ifargs[1]=='1':#print("xxx")#else:#print("ooo")#sys.exit()12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970qApp是个全局变量,可以从其他模块拿到该模块的app对象官方代码通过打印得知,qApp与我们自己创建的app得到的结果一样(3)pycahrm激活模板设置我们看下代码会发现,每次通过PyQt5来开发图形化界面程序,很多代码都是重复的,我们每次都要写一遍,对于重复的代码,每次都要写一遍,很耽误时间在pycharm中,我们可以通过设置模板,来简化我们得开发我们将重复性的代码拷出来#0.导入需要的包和模块fromPyQt5.Qtimport*#主要包含了我们常用的一些类,汇总到了一块importsys#1.创建一个应用程序对象app=QApplication(sys.argv)#2.控件的操作#2.1创建控件window=QWidget()#2.2设置控件#设置窗口,默认是python,只有顶级控件才可以设置栏的window.setWindowTitle("")#设置窗口大小,注意,设置的空间尺寸大小,不包含上面的栏window.resize(500,500)#2.3展示控件window.show()#3.应用程序的执行,进入到消息循环sys.exit(app.exec_())1234567891011121314151617181920212223242526272829然后在pycharm的设置中搜索live,找到LiveTemplate找到python,展开。在pyhton目录里面添加活动模板点击右侧的加号,选择LiveTemplateAbbreviation表示我们设置的快捷键比如qtt,Description填写模板描述信息然后将我们准备好的模板代码粘贴到Templatetext中,当我们在python文件中,输入qtt时,就会自动将我们设置的代码块插入到python文件中我们还需要插入模板代码后,光标定位到需要修改的地方怎么配置呢?在需要修改的地方。用$符号包裹一个变量然后点击下面的Define,设置我们这个模板应用到哪些代码中选择python然后点击Apply应用,点击OK此时,当我们创建python文件后,只需要输入qtt,按回车,就可以将我们设置的模板代码插入进去并且,光标定位到我们设置的位置添加些控件运行2.使用面向对象的编程方法上面面向过程的写法,在程序比较小时,还是可以的,但是如果我们开发的GUI程序较大时,采用面向过程的方法,则不是那么合适了,一是代码比较冗余,二是维护起来不太方便,三是就是重用价值比较差面向对象代码如下:fromPyQt5.Qtimport*#自定义一个类,一般是继承我们要创建的顶级控件classWindow(QWidget):#写自己类的init方法def__init__(self):#当我们继承某个类时,需要调用父类构造方法,如此才能正常使用父类的一些方法和属性super().__init__()#设置窗口self.setWindowTitle("QLabel项目")self.resize(500,500)self.setup_ui()#此处调用一个个UI的方法展示即可defsetup_ui(self):self.myqlable()#每个控件可以写一个方法defmyqlable(self):#创建控件时,要继承父类qlabel=QLabel(self)qlabel.setText("景天来了")qlabel.move(200,200)#设置控件样式qlabel.setStyleSheet("background-color:cyan;")if__name__=='__main__':importsysapp=QApplication(sys.argv)#QWidget控件的父子关系()window=Window()#window=QWidget()window.show()sys.exit(app.exec_())1234567891011121314151617181920212223242526272829303132333435363738394041运行,依然能正常显示窗口和组件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-7 05:48 , Processed in 0.438152 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表