tkinter富文本tkr(1)简介

引言

tkinter是Python官方使用的GUI库,这大家都知道。关于tkinter的优点和缺点,在这里不多说,本专栏主要讨论和研究tkinter原生的富文本格式,以此来为tkinter创建一个适用于tkinter本身的富文本格式文件,并实现渲染。


tkinter能够使用的富文本

Text本身

Text组件是tkinter当中功能丰富性仅次于Canvas的组件,同时也是内容排版最方便的组件。Text通过tag、mark等方法操作,可以展示一定的富文本内容,在tkinter界面开发中有很重要的作用。但是,缺点也很明显。

  1. 内容渲染也功能代码较差,不利于规范开发
  2. 方法使用与Python中的函数使用无二,如果要显示的内容复杂,怎么代码相应的也是很复杂的

比如显示有颜色的文字:

Text.tag_config('colorred',foreground='red',background='black')
Text.insert('end','red words','colorred')

仅显示几个红色的文字就需要这么多的代码,更多、更复杂的显示所需要的代码量可想而知。

HTML

tkinter显示HTML?好吧,告诉你,这是完全可以的

显示HTML3

通过tkhtmlview包即可。该包通过使用Text实现对HTML3的渲染。

pip install tkhtmlview

缺点如下:

  1. HTML3的渲染效果不佳,因为选择用富文本组件去实现超文本
  2. 灵活性还不如直接使用代码

显示HTML4

通过tkinterweb包即可。该包通过自定义一个TkHtml组件,实现对HTML4的渲染。

pip install tkinterweb

这个看起来渲染效果很好,但是也有它的不足:

  1. 网页下载慢,因为受Python模块速度的限制
  2. HTML4的css样式显得毛糙
  3. 需要绑定大量回调函数,否则无法达到渲染HTML4的效果

显示HTML5

在tkinter中显示HTML5,就需要外部支持了。

第三方包:

pip install tkinterie //调用系统ieframe
pip install mbpython //使用miniblink.dll,需要额外下载
pip install cefpython //使用谷歌内核

其它方法:

嵌入小型浏览器窗口

其中,tkinterie依赖于系统;mbpython无法播放视频;cefpython体积庞大;嵌入窗口无法对组件进行有效控制。

富文本标记语言

在tkinter中,通过操作富文本标记语言,实现富文本渲染。

Markdown

通过markdown2包将Markdown转化为HTML,再用上面提过的方法渲染HTML。目前还没有直接渲染Markdown的组件或应用。

Tin

Tin标记语言是我定义和创造出来的。Tin标记语言使用TinText进行渲染,既可用于富文本展示,也可以作为“Tinlayout”进行页面布局。

Tin

Tin知识库

pip install tinengine

主角TKR(tkinter rich form)

tkr是依据tkinter.Text本身定义出来的富文本格式,但这并不是tkinter原生的,而是我通过对Text的样式描述提出来的。

格式

tkr的版本为:1,目前,tkr只能够描述文本内容,且粗体、斜体以及tag_bind等内容无法渲染,因为这涉及到tkinter中其它的库。

tkr文件的格式如下:

=tagon=
tagname1 {'background':'','bd':'0','cursor':'hand2',...}
tagname2 {...}
...
=tagoff=

=texton=
[('tagon','tagname1','1.0'),('text','words use tagname1','1.0'),('tagoff','tagname1','1.17'),...]
=textoff=

通过格式描述,很明显的看出tkr文件中的内容,tag部分定义了不同的标签不同的样式,text部分描述了Text组件如何渲染内容。

如何生成&渲染

这个内容不是本文章要探讨的,这两个内容留到之后的文章中。

不过,我已经向好了该如何初步完成tkr文件的生成和渲染。

解析生成

使用Text的dump方法获取内容描述,通过tag_config方法获取样式描述。

渲染方法

先解析样式描述,再通过text部分的内容逐个渲染。

为什么用TKR

tkr格式是根据tkinter自身规定出来的格式,与tkinter的Text具有良好耦合性,有很多优点。

  1. 基于原生tkinter,一般不需要其它库的支持
  2. 以描述格式为主体,方便解析渲染
  3. 相比渲染HTML有更快的速度
  4. 相比Text本身代码操作更加简洁,因为tkr文件不需要手写,它的解析生成会在往后的文章中详细说明

当然,tkr也有缺点:

  1. 无法描述动态内容,与Tin相比缺少动态富文本功能和交互功能,只能达到Markdown层面
  2. 仅限于Text能够展示的内容,目前无法内嵌组件
  3. 样式缺乏

显然,上述的所有富文本渲染,在tkinter中都有优劣,但是tkr格式文件最大的有点,就是对tkinter而言,使用相当方便


结语

关于TKR格式文件,就先引到这,专栏中的其它文章将会细致讲解TKR文件。

猜你喜欢

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