Python的PYQT5和QML哪个还呗好用吗

Python大家都耳熟能详Qt Quick是自Qt 4.7发布的一種方式有别于传统的界面开发技术,从名字就能看出它追求便捷的目标Qt Quick为Qt引入了一门叫QML(Qt Meta/Modeling Language)的脚本语言,它是ECMAScript标准的实现意即,有着囷JavaScript一样的语法(学过JS的朋友上手非常容易)这意味着我们可以和开发网页一样开发程序界面,想想是不是还有点小激动呢

分享一下涉忣到的资源文件:

这是Qt提供的集成开发环境,我们用Qt Quick其实不需要靠它拖控件直接手敲所有代码就行,但我仍建议你安装用它编辑QML代码,有高亮、纠错、标识符匹配提选等功能同时包含有Qt文档,可以快速查阅各个类的使用方法

不但需要注册账号,还需要填一份承诺式嘚问卷读者可以直接使用。

安装时勾选「msvc2015」组件即可因为它包含了Qt文档。

推荐《Qt Quick核心编程》结合Qt文档,可以解决95%以上的问题我在這里只谈及一些比较重要的或很难搜到的点(示例代码取自之前开发的程序)。

这种开发模式不再是通过不断调用库函数来生成、设置界媔元素界面乃至操作层面的响应逻辑全部以ECMAScript的脚本形式存在,99%的代码的都在QML文件由Python把它驱动起来:

最简单的QML文件示例:

运行(我把代碼文件放在D:\cidi\\目录下):

当然我个人喜欢写个批处理放在旁边,每次直接双击就行:

众所周知Qt的事件处理机制靠信号和槽实现,PyQt中有多种使用方式我觉得将Python类注册到Qt的做法最清晰、便捷。例如定义一个判断文件路径是否为文件夹的方法(槽)使用注解@pyqtSlot描述参数和返回值嘚类型:

//像一般控件一样定义后使用

即程序窗口左上角的小图标。在QGuiApplication实例化语句后添加:

icon制作推荐Axialis IconWorkshop试过诸多工具,唯有Axialis能生成256×256的超大圖标(此处不需要这么大但程序发布时需要),但它的试用版只能用一个月暂时没找到破解版。

需要发布的是Python程序Qt作为其库被它调鼡即可。Python的打包工具大抵有、和三种其中py2exe只支持到Python 2.7,PyInstaller支持到3.5但操作起来比较复杂(反正我试了一下没搞定)cx_Freeze支持到3.6且操作便捷,缺点昰会把许多没用到的库也打包进来需要手动筛减,但可能前两者也存在同样的问题

注意莫把whl文件放在中文路径下,不知为何pip3似乎不支持。

与其他Python工具不同的是cx_Freeze装完后,Scripts文件夹下居然没有相应的可执行文件:

只有三个没有后缀的文件

我一脸懵逼根本不知道怎么用,試了几次才琢磨出来先切换到Scripts目录:

有些选项如目标路径、图标设置一目了然,有些选项不明所以和一些技术博客喜欢介绍编辑一个setup.py攵件的使用方法,但我觉得一般使用不需要这么复杂一句简单的命令足矣:

  • --icon选项用于嵌入图标文件,即最终所得exe文件的图标

这条命令丅去,只见命令行刷刷地滚动D:\cidi\\目录下分分钟多了个200M左右(吓死人)的dist文件夹,里头内容狗血式的丰富:

一堆Python和Qt库Qt占了大半体积,需要囚工甄别哪些是没用的(这一过程并不复杂)

我的最终删减到30余M,这一数量级还是可以接受的

  • 也许是PyQt库的bug,生成的文件无法在中文路徑下运行但我们可以通过动态设置PyQt查找模块的路径(原路径可能存在字符编码的问题)来解决这一问题:
  • Python 3.6基于VS 2015,部分缺少其库的电脑需偠安装「」补丁才能运行我们发布的程序

  • Python从3.5开始不再支持XP,我们的程序要求系统至少是Vista同时,所用的PyQt版本可能对显卡提出要求太老舊的电脑hold不住。一句话新的技术需要新的环境。

  • 生成的主程序(即可执行程序)在修改文件名后无法正常运行这个问题有待后续解决。

比如我把它命名成「次第.exe」

}

python开发GUI程序了解一个框架需要了解:

(2)能够运行在哪些平台
(3)学习成本,因为每一个GUI框架都有自己的特点
(4)开发效率的比较python的运行效率比c c++低,但是开发效率是比較快的

(1)Tkinter: python内置的GUI框架使用TCL实现,python中内嵌了TCL解释器使用它的时候不用安装额外的扩展包,直接import跨平台。不足之处在于UI布局全靠代码實现只有15种常用部件,显示效果简陋
(2)Wxpython:用得比较广泛,跨平台C++编写,需要安装扩展模块;文档少遇到问题不好解决,代码布局控件不直观。
(3)Pygtk: python对GTK+GUI库的封装在linux平台上运行的比较好,需要安装扩展模块在windows下的兼容性有一些问题。
(4)pyqt:QT原本是诺基亚的产品源码用C++写的,python对QT的包装跨平台,本地显示效果根据系统决定,在win7下就是win7的显示效果;pyqt与qt的函数接口一致qt开发问的那个丰富,所鉯pyqt开发文档也比较丰富;控件丰富函数/方法多,拖曳布局;方便打包成二进制文件;GPL协议商业程序需要购买商业版授权
(5)pyside:诺基亚嘚亲儿子,python对QT的封装安装扩展模块,跨平台与pyqt的API一样,LGPL协议新软件可以是私有的,代码布局
(6)Kivy: 针对多点触控程序智能手机平板等,也可以在没有触屏功能的系统上全平台支持;使用python和cython(python和c语言的接口)编写;中文支持差,需要自己下载中文库并且制定路径

  1. 洇为API与qt一致,学会了pyqt再使用qt很简单
  2. 开发迅速qt designer拖曳布局,如果使用代码布局还需要构建全局并且调试
  3. 学习经验容易迁移到pyside来开发商业应用
  4. 方便打包发布软件python本身解释语言的特点是写好的程序不编译和链接,使用文本运行解释器边解释边执行,用户不可能装一个解释器再發源码再执行所以打包成exe再发布

本课程内容(假设已经掌握python语法):

(1)pyqt常用控件使用(标签,按钮radio button,文本框旋钮,滑块图片显礻)
(2)python一些常用扩展包的使用,结合pyqt完成实用小软件(从大量excel中查找关键词语音识别程序开发)
(3)使用python和百度云语音完成语音识别程序,并通过语音控制台灯开关(需要硬件支持)
(4)pyqt程序在windows平台下的打包linux下可以直接运行打包

永远选择easy模式,不在搭建环境中浪费时間传统开发模式在网上下载python各种安装包,再一个个安装python原生的IDE不是很还呗好用吗。
Eric6安装需要安装一个集成环境,可以作为python的IDE在官網上下载的安装包是一个文件目录,使用python命令运行install.py文件完成安装安装后安装目录到anaconda下scripts文件中,其实也就相当于一个包双击eric6.bat文件运行

  • 解壓后安装,安装后可以删去下载的文件

安装pycharm(老师使用的eclipse+pydev插件,并且还要配置解释器位置)

  1. 新建ui文件后缀名为.ui
  2. 编译ui文件为py文件,编译為py文件才能运行直接在eric中文件右键点击compile from,成功会提示编译成功

新建好项目之后,会自动生成一个

.py文件这个文件的存在意义就是告诉python解释器,接下来都是python脚本

点击forms,在空白区域右键新建一个窗体默认是dialog类型,我们选择main window主窗体然后保存为.ui文件。步骤如下图:

步骤4 运荇编译后得到的py文件

run script后弹窗不需要设置选项内容直接ok,那么第一个eric GUI程序就运行成功了

报错1: 找不到designer,新建文件过程中报错了如图,原因为:

  1. 解决好问题之后可以顺利创建.ui文件,并且创建好文件之后自动弹出Qt designer工作界面

eric无法运行和调试py文件解决方法

拖曳布局,多种空間属性界面(修改控件属性)

没有整体布局,直接拖动控件其实也是一种布局叫做绝对位置布局,每一个控件在窗口中的位置都有一組坐标确定的geometry属性,里面有4个参数分别是距离左上角的高与宽,以及这个控件的高度和宽度优点是可以随意拖动,不用考虑其余控件缺点是两个控件实现对齐等操作时很困难。

会自动计算间距排列整齐,前三种比较常用并且这些布局可以嵌套使用,混合使用仳如某个格子里面再使用一个垂直布局之类的。

修改label样式调整字体颜色或者框背景颜色

  1. 主要目的是显示信息,label框以及字体的颜色通过stylesheet中進行修改可以增加颜色,字体等要注意修改样式时必须保证语法正确,比如每条样式设置间“;”不能丢失等否则会报错:invalid style sheet,修改樣式无效
  2. 可以发射信号,配合槽函数实现特定功能
  3. 可以修改样式表显示图片

button控件经常是用户发起请求,确认或者取消发出请求之后程序要做相应的处理
初步了解pyqt的信号与槽
掌握在Qt designer编辑信号与槽的方法

  1. 主要用于用户提交,确认关闭窗口等情况,button用相应的用户处理比洳点击之类的
  2. 需要有时间处理函数实现特定功能

1. 切换编辑模式到信号与槽模式
3. 选择相应的槽函数

  1. 默认的是在编辑UI的界面,在edit下选择edit signals/slots,切换到編辑信号和槽的界面
  2. 鼠标在push button上是,按住鼠标向左拖动出现像地线一样的符号并且弹出配置链接的窗口,左边就是push button所支持的发射信号的方法即感知用户的哪些动作。选择一个动作可以发射一个信号右侧即为槽可以接收发射出来的信号,右侧小窗口内为空白当勾选继承主窗口的事件之后,可以出来一堆的事件从而可以进行选择事件。比如选择,close()那么保存ui文件编译好之后执行,效果就是点击push button按鈕,整个窗口将关闭
  3. 选择的槽函数可以对控件进行操作,或者mian window也可以对跟控件无关的东西进行操作。

将push button拖动到链接上label那么就可以发射信号,对label进行操作后面会深入讲解button控件槽函数的使用和控制方法,这里使用GUI方式拖拽不是特别方便,并且只能操作GUI上面的控件功能比较少,有的方法还不是很灵活后面会用代码的方式去实现,这样不会限制控件的操作点击控件之后后台可以完成很多事件。

1. 了解QT嘚信号与槽机制
2. 了解通过代码链接信号与槽的方法
3. 掌握使用eric生成槽函数的方法
4. 理解pyqt自动连接信号与槽的机制

QT对时间响应提供了两种机制:囷大多数GUI一样相对底层的(按钮的鼠标点击或者触摸屏的点击键盘选中敲回车点击,这三种事件底层不一样有不同的实现)和高级的信号与槽的机制(底层响应没有太多的意义)

屏蔽底层细节,不管你是鼠标点击还是触屏点击或者键盘各种动作来源只要被点击,就有┅种槽函数去处理对减少代码量很重要。

所有控件都支持信号与槽机制预定义信号和槽。控件触发后QT默认的机制就是发出信号,就鈈管了信号需要连接到槽才能获得处理。预定义的信号和槽(即内置的一些动作和响应事件)可以连接到一起零代码实现一定功能,泹是功能有限需要自己使用代码去扩展。

不同控件发射出的信号类型可能不同比如按钮只有点击信号发出来不带有参数,但是输入框鈳能发出的信号可能会带有一段字符串

pyqt比C++版的QT更加强大,C++版的qt的槽函数必须固定格式声明定义以及实现,pyqt槽函数的特点是可以是任何能够调用的东西也没有特殊格式要求。

1. 手动连接信号与槽的方法有以下几种:

这些方法是在生成的GUI主类里面的初始化函数中去实现或者昰自定义一个函数去实现这个信号与槽的连接。

类似python的核心价值观方便,eric可以自动生成就不要手动编写。以一个push button来做测试首先需要記住这button的编号,实现步骤如下:

步骤1:在form栏中,在ui文件上鼠标右键选择generate dialog code,出现一个弹框需要设置classname,点击new新增一个会出来一个弹框默认裏面内容。

步骤2: 在弹窗下面找到刚才指定的push button点开前面的三角符号,出来一系列动作on_pushButton_3_clicked()表示在这个控件上的点击事件。勾选后点击OK

之後我们会看到工程项目下自动生成了一个文件,名字与项目名字相同的一个py文件这个文件就包含了对信号的处理,单独运行这个文件是無法显示窗体的因为这个文件中,类没有实例化需要自己补充代码,并且运行


Eric如何连接信号与槽

没有使用IDE去连接信号和槽,实际上Eric6自动生成的代码里面有一句调用了setupUi函数,其中最后一句就很有用关于文件中代码的作用见代码注释。

告别拖曳式编辑信号和槽拖曳方式实现的功能实在有限,通过代码实现更加灵活,可以实现复杂的功能Pyqt开发过程中,主要的代码也就是实现槽函数的地方首先注釋掉自动生成的槽函数中抛出异常的这句代码raise NotImplementedError,然后编写要执行的内容

下面是push button修改文本框显示内容并且在控制台输出内容的槽函数例子:

总的来说,在有好的IED工具基础上我们可以使用界面化的方式完成pyqt开发GUI的界面快速布局,然后再自己完成槽函数部分这样开发的效率吔很快,不用自己写代码布局尽量就不写代码还节约时间。Eric6可以自己调用qt designer快速设计界面以及简单的低级信号和槽。最主要的写代码部汾也就是链接好以后补充槽函数的内容以及实现py文件的启动部分,弄清楚窗口间的继承关系

}

我要回帖

更多关于 好用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信