tkinter+miniblink实现网页组件

引言

在我之前的一片文章:tkinter浏览器组件中,谈及到了tkinter自身没有办法实现浏览器组件显示HTML文本的问题,同时给出了使用外部程序实现tkinter浏览器组件的方法。

但这篇文章,我使用“网页组件”的名称,因为这次可以全面由tkinter(Python)控制这个组件。

之前的方法优缺点分析

根据上面提到的文章中的方法,总结出以下优点和缺点。

优点:

  1. 需要的外部程序(文件)体积小。
  2. 开箱即用,不需要封装

缺点:

  1. 没有控制权,从运行程序的那一刻开始,就和主程序脱钩了
  2. 使用ie内核(当然,aardio可以用其它的,但是依赖系统浏览器,生成的文件也很大)
  3. 如果焦点在浏览器上,那么tkinter窗口没有焦点

对此,我们有必要提出另一种方法,让Python调用现代浏览器内核的dll,使其连接到tkinter窗口中。

注意

在往下读之前,请先注意几点:

  1. 下面的方法与之前的方法不是替代关系,因为同样有缺点,最后再说
  2. 不是cefpython,cef接近100M自己电脑上用源码跑可以,打包成exe……
  3. 与cefpython类似

miniblink

这就是这篇文章的主角:miniblink。关于miniblink的详细介绍和使用方法,可以见miniblink官网

做所以选择miniblink,有以下几点原因:

  1. 可无缝替换原版electron,现代浏览器的内核
  2. 由blink引擎精简化得到,只有一个node.dll,约28M(64位为38M),经upx压缩后只有约8M
  3. api功能完善
  4. 国内大神编写

安置好外部文件

当从miniblink官网下载地址下载miniblink的SDK后,会发现文件夹中有超多文件,说好的只有一个dll文件呢?其实,这是整个miniblink的环境,包括核心api、测试文件、demo、插件等等。

事实上我们只需要两个dll文件,32位用“node.dll”,64位用“miniblink_x64.dll”。实际上就一个dll文件需要用到。32位的dll文件upx压缩后只有8M左右,64位的dll文件upx压缩后之后11M左右。

wke.h 头文件要不要无所谓。至少在Python这无所谓~~~

把两者其中一个你需要的dll文件放在你的项目程序文件夹内即可。当然,如果你愿意,这个dll文件可以放在任意一个目录下,甚至是不移动。但一定要记下来文件路径

连接到Python

这可是一个dll文件,包含100多个方法以及指针、复杂的回调关系……

不慌,就像cefpython,当我们自身能力不够时,总有厉害的人为我们铺好前行的道路。

mbpython,由 lochen 编写,能够方便地将miniblink的api转化为Python可以调用的函数。[感谢.png]

现在马上用 pip 下载 mbpython。。。。。。

简单例子

如果你下载了miniblink的SDK、mbpython,记下了dll文件的路径,那么下面是一个简单例子:

from tkinter import *
from MBPython import miniblink


a=Tk()
a.state('zoom')#全屏
a.update()#更新窗口状态和信息

mbpython=miniblink.Miniblink
mb=mbpython.init(r'F:\Python\Lib\site-packages\MBPython\node_x64.dll')#操作核心

wke=mbpython(mb)#得到wke控制权
window=wke.window#miniblink的界面容器

webview=window.wkeCreateWebWindow(2,a.winfo_id(),0,0,a.winfo_width(),
                                  a.winfo_height())#核心组件,大小与窗口尺寸一样
mb.wkeLoadURLW(webview,'http://www.baidu.com/')#载入百度网页
window.wkeShowWindow(webview)#显示组件
#下面这行代码在单独使用miniblink时用
#window.wkeRunMessageLoop()

a.mainloop()

效果如下:
在这里插入图片描述

至此,使用miniblink实现tkinter网页组件就已经实现了。更丰富的网页组件功能还要大家自己去发掘。


缺点

相较于之前用外部程序,使用miniblink使tkinter窗口有更契合的现代网页组件,并且拥有组件的全部控制权。但同样的,该方法也有如下缺点:

  1. 文件体积还是过大,即使用upx压缩后10M左右的大小,也比400k大很多
  2. 免费版的miniblink功能受限,比如无法播放视频
  3. 关于32位和64位的dll文件,必须与Python的架构相同(ctypes需要)

结语

总而言之,抛去cef,我们在外部谷歌组件和精简功能之间找到了平衡点,使得tkinter有了真正的网页组件。

当然,如果你的应用中仅仅是将网页嵌入,那就没必要怎么做。使用更小的文件获得更多的功能才是正道——tkinter浏览器组件

☀tkinter创新☀

猜你喜欢

转载自blog.csdn.net/tinga_kilin/article/details/113752464
今日推荐