tkinter文本框小功能(4):列表文本
- 写在前面
- 层次和序号自定义
- 自动对齐
- 代码
- 效果
写在前面
在一些说明文档中,往往会用到列表格式的文本,以此来呈现目录、级层、从属的关系。在Markdown文本中如下:
- 一级内容1
- 从属内容1
- 从属内容2
- 一级内容2
不难发现,Markdown中的列表格式有如下特点:
- 列表有多个层次
- 开头序号可以自定义
- 如果过有自动换行的内容,渲染器会自动排版对齐
那么,我们将通过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)
很简单,因为我已经说了是小功能,可以丰富文本框的显示。
效果
随便写了一篇,来看一下效果:
☀tkinter创新☀