tkinter文本框小功能(4):列表文本

  • 写在前面
  • 层次和序号自定义
  • 自动对齐
  • 代码
  • 效果


写在前面

在一些说明文档中,往往会用到列表格式的文本,以此来呈现目录、级层、从属的关系。在Markdown文本中如下:

  1. 一级内容1
  • 从属内容1
  • 从属内容2
  1. 一级内容2

不难发现,Markdown中的列表格式有如下特点:

  1. 列表有多个层次
  2. 开头序号可以自定义
  3. 如果过有自动换行的内容,渲染器会自动排版对齐

那么,我们将通过tkinter的文本框实现以上的功能,来显示列表格式的文本。

下面,我将通过对Tin标记的开发,配合说明

层次和序号自定义

在列表中要有层次感,可以用到tkinter文本框的lmargin1参数,该参数会自动缩进绑定文本段的首行。如果是一级内容,那么这个参数可以设置为“0”,之后的每一级内容依次缩进。

在Tin中,我们可以使用<list>标签显示列表格式的文本,其参数如下:

<list>
0;1
...
</list>
0:排版位置以及开头序号。格式为[=](A)
1:列表文本内容

如:
<list>
1;一级内容
=1.1;从属内容
</list>

其中“排版位置以及开头序号”的格式分为两个部分,第一个部分是以“=”组成的,如果没有“=”,则代表该内容是一级内容;第二个部分是该列表的自定义序号。

而第二个参数就是列表的内容,我们将解决自动对齐的问题。

自动对齐

如果这一行内容超过了一行,需要自动换行来显示,那么就需要调整除了首行以外的文本缩进。还好,tkinter文本框的lmargin2参数提供了这个办法。

在首行缩进中,有用文字部分不包括缩进和序号。因此,在其它行的文本缩进中,还要留出序号的空间。一般来说,缩进的大小是首行缩进的两倍,但这是有局限性的,目前我也没有什么好方法,望大家指教。

代码

u='=1;一级内容'.split(';')
tab,st=re.findall('^(=*)(.*)$',u[0])[0]
liin=st+'. '+u[1]+'\n'
Text.tag_configure(tab,lmargin1=len(tab)*20,lmargin2=len(tab)*40)
Text.insert('end',liin,tab)

很简单,因为我已经说了是小功能,可以丰富文本框的显示。

效果

随便写了一篇,来看一下效果:

Python tkinter 文本框内容 tkinter更新文本框_tkinter

☀tkinter创新☀