tkinter文本框小功能(6):锚点

tkinter文本框小功能(6):锚点

引言

锚点之一概念在文本浏览中很常见,那就是在同一页面的文本内容在,添加一个锚点标识符,指向一个确定的标识(mark),而且这个标识在文本渲染后真是存在。当读者点击标识时,会自动显示到相关的内容部分。因此,这个功能虽小,但是确实很实用。特别是单页文本比较长时,使用目录和锚点搭配,可以达到很好的效果。

因此,与其说锚点是文本框的一种功能,它更像是一种阅读体验。


添加标识

在tkinter.Text中,我们可以使用mark_set方法来添加标记。

好处在于这是一个现成的标记方法,而且可以指定位置。

self.mark_set(mark_name,index)

而在Tin标记语言中,使用<mark>标签进行类似操作。不过更加方便的是,<mark>标签不需要指定标记位置,因为TinEngine会自动锁定当前渲染输出位置。也就是说,当你需要在某一个部分的内容添加标记时,不需要理会上下文是什么,也不需要知道渲染到这里到底是什么index位置,只需要在这里添加一个<mark>标记即可。

这样的设计可以让编写者更清楚自己在写什么而不是要一直使用mark_set来进行反复测试。

<title>标记测试
<main>随便什么内容
<sp>5

<main>下面一行的开头有一个标记
<mark>tag1
<sp>3

<middle>本文末尾有一个tag2
<mark>tag2
<sp>

;下面省略

添加锚点

python层面

这个在tkinter中就没有现成的功能了。

在TinEngine中,使用了如下类似代码来处理标签:

                if tag_num>3:
                    self.error(str(tag_count),'<acr>最多支持三个参数:<acr>mark;fg;bg')
                    out()
                if u[0]=='':
                    out()
                if tag_num==1:
                    state=self.arc_(u[0])
                else:
                    state=self.arc_(*u)
                if not state[0]:#不正常
                    out()

大家不需要理会这些代码的具体含义,因为这个不是重点。

在python层面,主要是写响应功能。剩下的两个颜色参数都是由编写者自行决定的。接下来才是主要功能代码。

    def arc_(self,mark,f='',b=''):
        acr_tag='acr_'+f+b
        try:
            self.tag_config(acr_tag,foreground=f,background=b)
        except:
            return False,f'颜色错误:{f}{b}不符合颜色编码'
        self.insert(self.end,'⚓',acr_tag)
        self.tag_bind(acr_tag,'<Enter>',lambda e:self.config(cursor='hand2'))
        self.tag_bind(acr_tag,'<Leave>',lambda e:self.config(cursor='xterm'))
        self.tag_bind(acr_tag,'<Button-1>',lambda e:self.see(mark))
        return True,''

以上也是省略代码,但主要看逻辑。

f、b分别且前景色、背景色。

很简单,那就是添加一个“⚓”,然后绑定一些事件。

值得注意的是,我们不能够先行确定标记。因为这个标记不一定存在于当前已经渲染完成的内容。当然,如果使用python编写的话,先不先获取标记,无伤大雅。但是在标记语言中就不同了。

Tin层面

Tin中,使用<acr>标签添加锚点。这个锚点可以在任意位置。因为hi要在点击时,才会去锁定对应标记。

根据之前的一段标记文本段,继续完善:

<title>标记测试
<main>随便什么内容
<sp>3
<middle>右边是一个锚点👉 
<acr>tag2
<sp>5

<main>下面一行的开头有一个标记
<mark>tag1
<sp>3

<middle>本文末尾有一个tag2
<mark>tag2
<sp>3

<middle>本文末尾有一个tag3
<mark>tag3
<sp>

;下面省略

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


结语

tkinter文本框的功能拓展远不只此,更多新奇的方法也在不断被开发。

🔆tkinter创新🔆

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值