《pyqt5-python-Gui入门教程》由会员分享,可在线阅读,更多相关《pyqt5-python-Gui入门教程(67页珍藏版)》请在金锄头文库上搜索。
1、pyqt5&python Gui 入门教程( 1) 第一个窗口( 1) 第一个窗口和代码详细注释: from PyQt5 import QtWidgets #从 PyQt库导入 QtWidget 通用窗口类 class mywindow(QtWidgets.QWidget): #自己建一个 mywindows 类,以 class开头, mywindows是自己的类名, #( QtWidgets.QWidget)是继承 QtWidgets.QWidget 类方法, # 定义类或函数不要忘记 :符号,判断语句也必须以 :结尾! def _init_(self): #def是定义函数(类方法)了,同
2、样第二个 _init_是函数名 # (self)是 pyqt类方法必须要有的,代表自己,相当于 java, c+中的 this #其实 _init_是析构函数,也就是类被创建后就会预先加载的项目 super(mywindow,self)._init_() #这里我 们要重载一下 mywindows同时也包含了 QtWidgets.QWidget 的预加载项 import sys app = QtWidgets.QApplication(sys.argv) #pyqt窗口必须在 QApplication方法中使用, #要不然会报错 QWidget: Must construct a QAppli
3、cation before a QWidget windows = mywindow() # 生成过一个实例(对象) , windows是实例(对象)的名字,可以随便起! # mywindows()是我们上面自定义的类 windows.show() #有了实例,就得让他显示这里的 show()是 QWidget的方法,用来显示窗口的! sys.exit(app.exec_() #启动事件循环 pyqt5&python Gui 入门教程( 2) 第一个窗口( 2) 上图是第一篇教程,下面的显示效果都一样,我们来看看有什么不同 1、类的名字、实例的名字都换了, 2、多了一个 if _name_ =
4、 _main_: 以及下面的代码缩进了,层次改变了 1、我们把结 尾的 5 句代码,单独建立了一个函数 2、然后直接调用函数 3、注意两个 def的缩进,第一个 def缩进了代表是在 class里面,第二个和class平齐,则是在外面。 可以看到显示效果是一样,我们却有很多办法去实现。 知识点: 1、 if _name_ = _main_: 是代表如果这个文件是主程序这运行下面的代码,如果是被别的程序文件调用的话,则运行下面的代码。 2、 _init_ 方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。注意,这个名称的开始和结尾都是双下划线。 3、生成实
5、例(对象)必须以类名 (),别忘记了() 4、类中的函数(方法)必须有 self,是代表属于这个实例(对象)本身持有的,而外部定义的函数则不需要。 整个流程; 先导入 PyQt5 中的 QtWidgets通用窗口库,通过继承QtWidgets.QWidget 来定义自己的窗口。然后生成一个对象(实例化),再调用 QWidget的 show()方法来显 示这个窗口。 pyqt5&python Gui 入门教程( 3) 第一个窗口( 3) frist.py 文件 second.py文件 这是两个文件,第一个文件和之前一样我们只录入的上半截,第二个文件我们保留了下半截, 也就是将一个文件分成两个文件
6、,从 second.py 文件调用 frist.py 来显示窗口的目的。 注意 second.py 文件加入了一句 from frist import fristwindows 即导入first.py的 fristwindows 类 是不是很熟悉,将自己的文件作为库导入进来,然后调用即可! 虽然都是显示窗口,我们这里已经学习了很多办法来显示它。代码区别也是很大,关键是灵活运用。 知识点: 1、库,这个例子是将我们自己的文件作为库导入,也可以称为自定义库。 注意不用 .py 结尾, pyqt会自动识别。 2、 frist.py的 firstwindows 的代码就是显示一个窗口用的,但是没有将它
7、实例化,并在 QApplication 中运行。 所以运行 frist.py是不会显示任何窗口的。 我们将显示 firstwindows的方法写在了第二个文件中,达到逻辑与界面分离的效果。 3、 QApplication相当于 main函数,也就是整个程序(有很多文件)的主入口函数。 对于一个 Gui程序必须至少有一个这样的一个实例来让程序运行。 4、最后一句是调用 sys库的 exit退出方法,退出条件(参数)是app.exec_()也就是整个窗口关闭。 其实入门没什么难度,只是对一些基本概念的掌握和了解,本人也是菜鸟,写的不是很好,只是希望能和更多有兴趣爱好的新手一起交流学习。 PyQt5
8、&python Gui 入门教程( 4) 初探 Qt Designer 设计师 网上很多教程都是代码,对于新手看起来就很头疼, pyqt同样为我们提供了 Qt designer来设计窗口界面, 用起来也非常方便,对于新手我们应该善用它,虽然做出来的界面不那么华丽,但至少可以做出个像样的窗口来。 打开 PyQt5的 Qt Designer,会自动弹出新建窗体对话框, 对于我们最常用的就是 Widget通用窗口类,还有个 MainWindows顾名思义主窗口。 PyQt5的 Widget被分离出来,似乎用来替代 Dialog,并将 Widget 放入了QtWidget模块(库)中, PyQt4是
9、QtGUI。 这是一个 Widget和 MainWindows,从界面上看起来没有什么,只是MainWindows默认添加了菜单栏、工具栏和状态栏等。 默认左边是控件栏,提供了很多空间类,我们可以直接拖放到 widget 中看到效果,点窗体 -预览( Ctrl+R) 每个空间都有自己的名称,提供不同的功能,比如常用的按钮、输入框、单选、文本框等等, 右边是对窗口及控件的各种调整、设置、添加资源(列如 :图片)、动作。 还可以直接编辑 Qt 引以为豪的信号槽( signal 和 slot)。 有了 Qt Designer 使得我们在程序设计中更快的能开发设计出程序界面,避免了用纯代码来写一个窗口
10、的繁琐, 同时 PyQt支持界面与逻辑分离,这对于新手来说无疑是个最大的福音,当然要做出华丽的界面还是要学代码的。 至少 Qt Designer 为我们提供了一些解决方法,另外我们也可以通过 Qt Designer生成的代码来学习一些窗口控件的用法。 PyQt5&python Gui 入门教程( 5) Qt Designer 窗口布局 Layouts( 1) Qt Designer窗口布局 Layouts提供了四种布局方法,他们是: Vertical Layout 纵向布局 Horizontal Layout 横向布局 Grid Layout 栅格布局 Form Layout 在窗体布局中布局
11、 前三种是我们经常会用到的,我们将布局 Layouts 拖动到窗体上会有红色框来显示, Layout的一些属性可以通过属性编辑器来控制,一般包括: 上下左右边距间隔,空间之间间隔等。 在我们使用布局之前,我们得对层次要有个了解,在程序设计中一般用父子关系来表示。 当然有过平面设计 经验的童鞋对分层应该有所了解,这里我们还需要将层分成层次。 其实就像 python中规定的代码缩进量代表不同层次的道理差不多。 从对象查看器中我们可以方便的看出窗体( Form) -布局( Layout) -控件(这里是 PushButton 按钮)之间的层次关系。 Form窗口一般作为顶层显示,然后使用 Layou
12、t 将控件按照我们想要的方式规划开来。 这里要注意一下, Qt Designer设计出来的文件默认为 ui文件,里面包含的类css布局设计语言, 如果想要查看代码我们还需要将它转换(编译)成 py文件,我们可以使用一条DOS命令来完成 D:Python33Libsite-packagesPyQt5pyuic5.bat mian.ui -o frist.py 更实用的转换命令可以将当前文件夹下所有 ui转换成 py文件: for /f delims= %i in (dir /b /a-d /s *.ui) do D:Python33Libsite-packagesPyQt5pyuic5.bat
13、%i -o %i.py PyQt支持用 LoadUi 方法直接加载 ui文件,当然我们通过转换后可以方便学习PyQt窗体控件的源代码。 下一篇我们来分析一下 Qt Designer布局的源代码 PyQt5&python Gui 入门教程( 6) Qt Designer 窗口布局 Layouts( 2) 首先我们来看一下,我们创建一个空白 Widget 窗体, Qt Designer 都为我们做了些什么? 嗯,比我们第一个窗体,多了那么几行代码,默认转换后的 py文件还不能直接显示出效果,下面我们慢慢学习。 这里我们只加入一个栅格布局,然后 .Qt Designer居然给我们多了 6行代码 其实
14、 Qt Designer 生成的代码(编译后)还是非常给力的,至少比我们自己写的规范多了。 这些代码或许不需要我们自己写,但至少我们能看得明白。 其中最主要的两句代码是: self.gridLayoutWidget = QtWidgets.QWidget(Form) self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget) 从 Qt Designer中可以看到栅格布局默认创建了两个对象, QtWidgets.QWidget和 QtWidgets.QGridLayout。 注意 (Form)和 (self.gridLayoutW
15、idget)参数,这里可以理解为放置到相应的对象里面。 Qt Designer果然做的比我们想想的多,下面我们再通过简化后的代码来对比一下,可能跟容易理解一些。 注意 :Qt Designer 首先会见栅格布局作为一个 widget放入窗体,并且不影响窗体大小。 栅格布局一般作为顶层布局使用,所以简化后的代码有个 self.setLayout( self.gridLayout) 同时 Qt Designer 会加入一些基本设置,默认信号槽声明,国际化语言支持等等,确实比我们自己写的要好的多。 当然我们需要了解其中的奥秘。 左边是 Qt Designer 设计效果,右边是显示效果。 再来个稍微复杂点的 知识点: 记得在 Qt Designer 中窗体的 layout层次可以通过对象查看器来查看, layout的一些设置可以通过属性编辑器来修该。 通常我们使用栅格布局作为顶层布局,将控件放置好之后可以通过右键 -布局 -栅格布局,将布局充满整个窗体。 我们可以先放入控件,然后 ctrl选中多个控 件,然后点击工具栏上快速布局工具进行布局。 在 mianwindows中默认会有个 centralwidget 布局也是继承自QtWidgets.QW