python做界面的一个新思路(初始篇)

Python013

python做界面的一个新思路(初始篇),第1张

python做界面我首先想到的是pyqt5,但是笔者之前基本是用wpf做界面,再用其他的做界面都有点不畅快的感觉。直接用到了HTML + CSS + js。随着前端技术的快速发展,如VUE,AUI这类框架的兴起,做个炫酷的页面,远比后端做个界面要快捷方便的多。

但是HTML + CSS + js是运行在浏览器里的,这个系列文章就是要打破python和前端的壁垒,让它们携手打造桌面程序。

那么这个心思路就是,利用pyqt5的QtWebEngineWidgets和QtWebChannel来做媒介,

python完成后台功能,HTML + CSS + js完成全部的界面功能。

界面需要python功能时,js方便的调用python函数并获取返回值。这样各自完成擅长部分,想想都有点小激动呢。

那这样是否靠谱呢?

根据笔者的目前尝试,感觉还是很靠谱的:

1 运行不卡顿,相对于纯的pyqt我感觉这种界面运行起来更流畅。

2 QtWebEngineWidgets移植V8引擎,基本和谷歌的效果是一样的。Vue这样的框架也可以直接引用。

讲QtWebEngineWidgets的文章有很多,我学习这个时候看到网上的很多文章也和受益,但是,基本都是讲的一样的,没有深挖。

首先,QtWebEngineWidgets和QtWebChannel是可以实现双向交互的,但是,在应用的过程中我发现,python调用js会比较简单,有现成的语法可用,而且传输过程中有的数据的类型都不用转换。而且能获取到js的返回值。

而js调用python就复杂一点,传递类型也只能字符串和int(目前我测试的结果是这样),目前网上大多的例子就是基于共享属性这个概念,js是可以调用python函数,但是没法获取到返回值。

但是应用中你就会发现,基本都是js调用python,比如界面中的按钮点击后需要执行数据分析,然后将结果渲染在界面上。那么过程就是js调用py并获取返回值。

今天的内容就是这些,喜欢的可以点赞支持,如果点赞较多,关于这个知识点我将继续做一期有趣的内容。谢谢!

官网下载Python3,LZ的配置环境是Python3.6,PyCharm 2017.2.1

File->Settings->Tools->External Tools,点击+好配置好即可,LZ已经配置好了,刚开始是没有的

Program里面填designer.exe的位置,Working directory里面点击右面的Insert按钮,插入和图片一样的值即可

Program里面填python.exe的安装目录,Parameters里面填如下内容

Working directory点击右面Insert按钮插入相同内容即可

兴建一个项目,右键点击项目->External Tools->QtDesigner,弹出QtDesigner的图形界面如下,LZ拖入了2个按钮

这时你会发现多了一个untiled.ui文件,文件名LZ用的是默认的,右键点击这个ui文件->External Tools->PyUIC,这时文件夹下多了一个untitled.py文件,打开untitled.py,加入以下内容Ctrl+Shift+F10运行即可

untitled.py

运行结果

LZ用的是pyinstaller,pyinstaller不支持Python3.6,无奈又下载了一个Python3.5的环境,运行和打包在Python3.5下,工具用的是Python3.6下的,也不影响已经配置好的工具的使用,命令行中输入一下即可

在命令行中进入要打包的py文件所在的目录,输入一下命令

然后到py文件所在目录的dist文件中,打开exe,结果一闪而退,原来是找不到外部的动态链接库,输入一下命令,指明外部链接库

-F的效果是打包成一个单文件,-w的效果是取消控制台。

这个是我开发的,将doc文件批量转为docx的小工具,源码放在github上,大家可以参考

https://github.com/erlieStar/doc2docx

欢迎star

作为Pyhon开发者,你迟早都会碰到图形用户界面(GUI)应用开发任务,这时候我们就需要一些界面库来帮助我们快速搭建界面,python的界面库很多,我认识的并不多,这里只列出几种我认识的

1.tkinter

Tkinter(也叫Tk接口)是Tk图形用户界面工具包标准的Python接口。Tk是一个轻量级的跨平台图形用户界面(GUI)开发工具。Tk和Tkinter可以运行在大多数的Unix平台、Windows、和Macintosh系统。

Tkinter 由一定数量的模块组成。Tkinter位于一个名为_tkinter(较早的版本名为tkinter)的二进制模块中 。Tkinter包含了对Tk的低 级接口模块,低级接口并不会被应用级程序员直接使用,通常是一个共享库(或DLL),但是在一些情况下它也被Python解释器静态链接。

2.pyqt

PyQt是Qt库的Python版本。PyQt3支持Qt1到Qt3。 PyQt4支持Qt4。它的首次发布也是在1998年,但是当时它叫 PyKDE,因为开始的时候SIP和PyQt没有分开。PyQt是用SIP写的。PyQt 提供 GPL版和商业版。

3.wxpython

wxPython 是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能键全的 GUI 用户界面。 wxPython 是作为优秀的跨平台 GUI 库 wxWidgets 的 Python 封装和 Python 模块的方式提供给用户的。

就如同Python和wxWidgets一样,wxPython也是一款开源软件,并且具有非常优秀的跨平台能力,能够运行在32位windows、绝大多数的Unix或类Unix系统、Macintosh OS X上。

4.Kivy

这是一个非常有趣的项目,基于OpenGL ES 2,支持Android和iOS平台的原生多点触摸,作为事件驱动的框架,Kivy非常适合游戏开发,非常适合处理从widgets到动画的任务。如果你想开发跨平台的图形应用,或者仅仅是需要一个强大的跨平台图形用户开发框架,Kivy都是不错的选择。

5.pygame

Pygame是跨平台Python模块,专为电子游戏设计,包含图像、声音。建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚。

这个库使用来写游戏的,但是你也可以用来写界面,嘿嘿

那选择什么库是个人的喜好,但是我推荐尽可能去选择一种通过且学习资料比较多的吧