我们知道,Python中有很多GUI库,这些库在创建应用程序时都很方便,常用的GUI库有tkinter、wxPython、PyQt、Kivy、Pyforms、pyGUI等,比较经典的库有tkinter、wxPython、PyQt。从今天开始,和小伙伴们一起梳理一下关于PyQt创建GUI应用程序的一些知识点和方法。
一个不错的GUI库PyQt简介
Qt是年由QtCompany开发的一个跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI应用程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(MetaObjectCompiler,moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。
年,QtCompany科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。
年,Qt被Digia收购。年4月,跨平台集成开发环境QtCreator3.1.0正式发布,至此实现了全面支持IOS、Android、WF,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。
年,Qt团队宣布最新版5.13版本发布。注意,它还在被支持。
PyQt是实现了一个Python模块集,是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac,甚至是Android中。
跨平台方面它同样表现出众PyQt采用双许可证,开发人员可以选择GPL和商业许可。在此之前,GPL的版本只能用在Unix上,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。
PyQt模块包含的内容
PyQt提供了哪些模块?
丰富的模块PyQt实现了超过个类库,包含了将近多个函数和方法。可谓是博大精深,这个库不仅提供了图形界面的开发,还提供了诸如多线程、网络、数据库、图形渲染等诸多常用功能。比较常用的接口如下:
QtCore模块包含核心的非GUI功能。该模块用于时间、文件和目录、各种数据类型、流、网址、MIME类型、线程或进程。
多线程处理模块QtGui模块包含图形组件和相关的类,例如按钮、窗体、状态栏、工具栏、滚动条、位图、颜色、字体等。
强大的用户图形接口QtNetwork模块包含了网络编程的类,这些类允许编写TCP/IP和UDP的客户端和服务器,他们使网络编程更简单,更轻便。
网络编程QtXml包含使用XML文件的类,这个模块提供了SAX和DOMAPI的实现。
xml处理接口QtSvg模块提供显示的SVG文件的类。可缩放矢量图形(SVG)是一种用于描述二维图形和图形应用程序的XML语言。
可缩放矢量图处理QtOpenGL模块使用OpenGL库渲染3D和2D图形,该模块能够无缝集成Qt的GUI库和OpenGL库。
图形渲染库QtSql模块提供用于数据库的类。
数据库支持等等还有很多,这里就不再一一例举了。
这么多模块,对于GUI编程,我们一般使用PyQt5.Qt中提供的接口。
创建一般GUI应用
具体步骤如下:
#导入相关模块
fromPyQt5.Qtimport*
importsys
#创建应用程序对象
app=QApplication()
#创建顶层窗口
window=QWidget()
#设置窗口属性
window.setWindowTitle(应用程序名称)
window.resize(,)
window.move(,)
#在顶层窗口中放置控件
label=QLabel(window)
label.setText(这是一个Label控件)
label.move(,)
#显示控件
window.show()
#应用程序执行,进入到消息循环,等待事件响应
sys.exit(app.exec_())
简化输入
我们知道,如果只是创建一个普通的GUI应用程序,上面的这些代码够用了,我们只需要将label控件换成自己应用程序中的控件即可。
创建一个livetemplate前面的内容我们知道,PyCharm提供了一个livetemplate功能,它可以使用简短的字符输入来替代我们输入大段代码内容。因此,我们可以将上述代码制作成一个模板内容,当我们输入“qtt”(打个比方,你可以替换成任意你喜欢的内容),让编译器自动为我们输入上面的这些代码。
以后,每次创建GUI应用程序时,只是修改label控件的那部分内容即可。
更方便快捷但是,这样的方法只是简化了我们的输入,并没有更好的封装我们的代码。
封装
同样的道理,我们可以将下面的代码装入到PyCharm中,定义一个livetemplate模板。
#!/usr/bin/envpython
#-*-coding:utf-8-*-
fromPyQt5.Qtimport*
classWindow(QWidget):
def__init__(self):
super(Window,self).__init__()
self.setWindowTitle($TITLE$)
self.resize(,)
self.setup_ui()
defsetup_ui(self):
$CODE$
if__name__==__main__:
importsys
application=QApplication(sys.argv)
window=Window()
window.show()
sys.exit(application.exec_())
按照上面的方法,将这个模板命名为qto,每次创建GUI应用程序时,在PyCharm中输入qto,即可自动为我们输入这一框架。
我们只需要输入TITLE变量和我们需要的控件(CODE),很方便,不是吗?
好了,今天的内容就到这里了,喜欢Python编程的小伙伴们