tkinter浏览器组件

  • 引言
  • 构思
    • tcl方面
    • dll方面
    • 嵌入窗口!
  • 创建浏览器窗口
    • 语言选择
    • 创建窗口
  • 嵌入窗口
  • 新的tkinter浏览器组件:2021-8-10更新
    • tkinterie的简单使用:2021-8-16更新
    • tkinterIE的功能:2021-8-16更新
    • 新的tkinter网页组件:2021-12-25更新
    • tkinterie使用新API:2022-4-9更新
      • tkinterie小改进:2022-6-18
  • 结语

引言

当然,tkinter原生的核心组件并没有浏览器组件,这是使得tkinter与wxpython和PYQT的差距非常大的原因之一。为了使tkinter窗口能够显示网页,很多人都为tkinter提供了配套绑定的浏览器组件==(注意是浏览器组件,不是html富文本框)==。以下是比较常用的方法或者绑定:

  • tkinterhtml(TkHtml的Python绑定,过时很久了,HTML4的风格,但tkinterweb做得挺好)
  • TkHtml(tkinter的浏览器组件dll拓展,也是比较过时的)
  • HV3(tkinter的浏览器组件dll拓展,与TkHtml配合使用,现代外观,但依旧比较老)
  • cefpython(Python的谷歌绑定,保持更新,但体积大)

那么我们怎么样才能够做到拥有现在外观,体积小巧的浏览器组件呢?

构思

tcl方面

我们知道,tkinter是对tcl/tk的绑定,如果我们在tcl组件中加入浏览器拓展组件,问题就解决了。但是,这种方法编写复杂,不易成功,而且就目前使用在tcl的浏览器拓展,效果都与现代外观浏览器差距甚远。

dll方面

使用系统ie组件或 edgehtml.dll 等dll拓展或许是一个不错的方法。但是结构是这样的:先用Python注册和使用dll的函数,再将效果传入tcl……这明显,超出实力范围了……

嵌入窗口!

这是集简单、高效、美观为一体的方法——嵌入外部浏览器窗口。很多GUI语言都自带浏览器组件使用方法,将这些代码编译成exe文件后,再将文件显示在需要显示的frame中,就成了tkinter的浏览器组件。

创建浏览器窗口

注意!!!,这一段内容必不可少,因为tkinter显示网页确实需要外部程序的支持!!!

语言选择

为了方便,选择 aardio语言,这个语言带有拓展GUI界面和快捷的智能提示(国人开发的)。

创建窗口

这里直接给出 aardio 代码:

import win.ui.minmax;
import win.ui;
import win.image;
import web.form;
/*DSG{{*/
mainForm = win.form(text="HtmlShow";left=0;top=0;right=895;bottom=700;border="thin";minimize=1;mode="popup";title=false)
mainForm.add()
/*}}*/Path=io._exedirwin.ui.minmax(mainForm)var wb=web.form(mainForm)
wb.noScriptErr=true;arg=_CMDLINE
if (arg!=null){wb.go(arg)
}else {wb.go("\res\NoneHtml.html")//这行可以省略,没必要,测试时使用
}wb.NewWindow3 = function(ppDisp,cancel,dwFlags,bstrUrlContext,bstrUrl ) { wb.go(bstrUrl)return ppDisp,true;
};mainForm.show();
return win.loopMessage();

思路就是创建细边框、无标题栏的弹出式窗口,然后最小化,使用时避免视觉干扰。最后,发布成exe文件。

嵌入窗口

在这我之前的一篇文章中,讲述了如何用 win32gui 在tkinter窗口中嵌入外部窗口。如果忘记或不知道,请到我的“tkinter实验”专栏中查找“tkinter创建真正的子窗口”。这里再次说明,我的那篇文章的方法,不仅可以嵌入tkinter窗口,还可以嵌入任何一个exe窗口(UPW应用不太稳定)。

首先,明白exe窗口标题(虽然没有标题栏)为“HtmlShow”,其次,将exe文件放入一个目录中,并且使用绝对路径。

现在我们来编写代码:

from subprocess import Popen
from tkinter import *#为了方便,一般不建议使用
import win32gui
from time import sleep as slpresultframe=Frame(master)#创建frame
###using exe
#Popen必须是完整路径(绝对路径),url为网址
Popen([TinPath+'\\data\\bin\\HtmlShow.exe',url])
slp(1)#等待窗口创建
hid=win32gui.FindWindow(None,u"HtmlShow")#获取窗口句柄
win32gui.SetParent(hid,resultframe.winfo_id())#显示窗口

思路和原因,在注释已经说明了,这里就不再解释。
TinPath为该程序的运行目录,我将生成的HtmlShow.exe放在这个目录的\data\bin\下

注意到外部窗口的大小已经设定好,如果想要覆盖整个frame,还可以调整外部窗口大小或者使用win32gui.ShowWindow(hid,win32con.SW_MAXIMIZE)

效果如下:


Tin知识库


新的tkinter浏览器组件:2021-8-10更新

通过对tkinter浏览器组件各种实现的研究中,我编写了新的tkinter拓展——tkinterie,该模块通过com调用系统IEFrame,启动webview组件,为tkinter窗口提供一个webview组件。
目前该模块已被我上传至pypi,通过pip install tkinterie安装。

2021-8-16更新:使用tkinterie必须保证IE的com接口可以正常访问,也要保证有ieframe.dll,若不能使用就放弃tkinterie。

tkinterie的简单使用:2021-8-16更新

通过pip安装tkinterie模块后,使用如下代码,可以显示HTML5元素。

注意是渲染HTML5元素,并不是一个完整的浏览器。

from tkinter import *
from tkinterie.tkinterIE import WebViewa=Tk()
a.geometry('700x500+100+100')w=WebView(a,500,500,'www.baidu.com')
w.pack(expand=True,fill='both')a.mainloop()

效果如下:

tkinterIE的功能:2021-8-16更新

  • 渲染HTML5元素以及css设计(网页或文件)
  • 运行JavaScript(网页或文件)
  • 提供的WebView组件可以像正常tkinter组件一样非自动或自动调整尺寸
  • 多线程使用(使用过程中可能会报错,但不影响使用)
  • 嵌入到tkinter的Canvas和Text(若被半遮蔽可能报错,但不影响使用)
  • 点击新窗口链接在本地打开
  • 在程序内渲染HTML5元素等网页内容
  • 自主限制edge自动打开

新的tkinter网页组件:2021-12-25更新

为了解决IE即将寿终正寝,而且在Python中的支持不佳的问题,我基于pythonnet和pywebview写了新的tkinter网页组件——tkwebview2。这将允许tkinter使用Windows提供的WebView2。
具体文章

tkinterie使用新API:2022-4-9更新

考虑到之后无法直接使用InternetExplorer.Application,现在最新版的tkinterie(-1.4.0-)不再使用comtypes,而是使用pythonnet,通过 .Net 使用WinForms框架创建WebBrowser组件。

新版的tkinter有以下好处:

  1. 与tkinter窗口紧密耦合
  2. 可以直接操作WinForms.WebBrowser,如获取属性、执行方法、绑定网页控件自身事件
  3. 99%可操作度

当然,有以下两个前提:

  1. 读得懂https://docs.microsoft.com/zh-cn/dotnet/api/?view=netframework-4.8&term=webbrow中的内容
  2. tkinter窗口必须在STA线程模式下运行,具体见说明

tkinterie小改进:2022-6-18

添加了一些基础方法:刷新、前一页、下一页、搜索界面等。


结语

看完这篇文章,相信你对tkinter的使用更上一层楼,tkinter还可以实现更多功能,这等待我们来探索。怎么样,不如现在试试?

使用pip下载:

pip install tkinterie

☀tkinter创新☀

tkinter浏览器组件相关推荐

  1. python创建按钮_掌握Python之Tkinter按钮组件的创建及使用

    不学python功能按钮肯定是不完整的啊,尤其是在使用python过程中,大量需要使用的tkinter,要怎么利用这个模块去创建个功能键呢?一起来看下吧~ 使用tkinter.Tk() 生成主窗口(r ...

  2. java调用浏览器组件来_Java 网页浏览器组件介绍

    在使用 Java 开发客户端程序时,有时会需要在界面中使用网页浏览器组件,用来显示一段 HTML 或者一个特定的网址.本文将介绍在界面中使用浏览器组件的四种方法,给出示例的代码,并且分析每种方法的优点 ...

  3. 第12章 GUI编程与Tkinter相关组件介绍

    本章的知识点: 1.了解GUI程序开发: 2.学习Tkinter的主要组件 内容: 12.1 GUI程序开发简介 12.2 Tkinter与主要组件 创建和运行GUI程序,需要5步: 1.导入Tkin ...

  4. tkinter绘制组件(18)——菜单

    tkinter绘制组件(18)--菜单 引言 布局 函数结构 为画布对象绑定事件 绘制菜单原型 计算最终菜单窗口的尺寸 菜单相应事件 菜单窗口焦点 完整代码函数 效果 测试代码 最终效果 2021-1 ...

  5. tkinter绘制组件(9)——点状等待框

    tkinter绘制组件(9)--点状等待框 引言 布局 函数结构 背景 移动点 动画样式 组件与单点控制 单点移动 结束函数 完整代码函数 效果 测试代码 最终效果 2021-7-30新样式 gith ...

  6. tkinter绘制组件(30)——便笺

    tkinter绘制组件(30)--便笺 引言 布局 函数结构 元素布局 标题 内容文本 大背景 调整元素层级 绑定拖动事件 完整代码函数 效果 测试代码 最终效果 github项目 pip下载 结语 ...

  7. tkinter绘制组件(bleem)——超链接

    tkinter绘制组件(bleem)--超链接 引言 布局 函数结构 文本与背景 绑定事件 两种样式更换 鼠标点击 完整代码函数 效果 测试代码 最终效果 2022-5-15新样式 2022-8-12 ...

  8. tkinter绘制组件(12)——表格

    tkinter绘制组件(12)--表格 引言 构思 外观 绘制方法 布局 函数结构 绘制表头 绘制表格内容 获取高度和重绘 完整代码函数 效果 测试代码 最终效果 2021-12-12新样式 2022 ...

  9. tkinter绘制组件(28)——评星级控件

    tkinter绘制组件(28)--评星级控件 引言 布局 函数结构 绘制星级 绑定事件 共同的背景 完整代码函数 效果 测试代码 最终效果 2020-8-9新改进 2023-1-16新改进 2023- ...

最新文章

  1. php session_start() 非常慢,PHP session_start()很慢问题分析与解决办法
  2. 现代浏览器的工作原理
  3. getresourceasstream 路径_Java 获取资源文件路径
  4. 互联网浏览本地html,如何加载本地HTML文件,如果没有互联网连接
  5. Android 混淆配置
  6. 数据库课程设计练习- 视图的使用
  7. 假货泛滥是淘宝的毒瘤
  8. 学校选课网筛选器的设想
  9. 未来10年35项最值得你期待的技术
  10. 自己的联想Y450笔记本无法连接无线网络的解决办法
  11. ESP8266 驱动1.3寸SH1106 OLED屏幕显示库
  12. uniapp 判断是否登录,是跳转至首页,否跳转至登录页
  13. 伯明翰高级计算机科学,2020年伯明翰大学高级计算机科学专业本科申请条件及世界排名|学费介绍...
  14. 安卓开发之设计微信界面
  15. Magic Mouse无法左右滑动
  16. 织梦cms模板下载:响应式机械螺丝设备网站模板
  17. 学生用计算机打出ilove,学霸爱另类:用数字字母化学元素情书来表白
  18. uniapp 录屏功能实现
  19. 超几何分布(Hypergeometric distribution)
  20. FutureWarning: The frame.append method is deprecated and will be removed from pandas in a futur

热门文章

  1. 视频号哪些领域值得做变现机会更大:国仁楠哥
  2. 鸿蒙系统手机一览表,四款华为鸿蒙系统手机推荐,后续可直接升级鸿蒙2.0
  3. Ubuntu20.04安装fcitx中文输入法(五笔拼音)
  4. 《Windows核心编程》读书笔记四 进程
  5. Python实用模块
  6. ubuntu安装与卸载deb文件
  7. service中间调用dao层方法时,出现Mapper method ‘dao.xxx‘ has an unsupported return type错误,但是sql执行修改数据成功,并没有回滚
  8. 一些工程研发专业名词解释、 制造业常用术语、 BOM的分类
  9. 认识System Center之一
  10. 计算机网络原理ip计算,计算机网络原理IP地址计算题