TinEngine使用(6)——多线程

TinEngine使用(6)——多线程

引言

作为基于tkinter的第一款原创标记富文本渲染组件,TinEngine可以用于很多方面:

  1. 富文本(Tin标记文本)渲染阅读
  2. 文本信息多样化
  3. 适用于tkinter的TinLayout窗体设计

其中,很多情况下,TinText(TinEngine的核心组件)都需要做到与常规窗口一样的功能,那就是能够安全地使用线程

多线程,给程序带来了一定的速度提升,使程序能够同步处理多项事件。TinText必须能够不阻塞程序地进行富文本渲染。

问题来源

事实上,TinText在设计时没有考虑过使用多线程。在使用一些标签时,因为TinText自身的耗时,就会阻塞主程序,导致使用者的使用体验下降。这些标签包括:

<stop>:常规暂停标签,期间使用者或读者不能够进行任何操作
<html>
<middles>
……

<stop>标签是比较能够体现Tin标记语言特性的一个标签,但同时也会阻塞程序运行。

Tin的特性之一:使读者跟随编写者的思路阅读文本。

如果TinText能够在独立的线程中渲染,整个程序的使用流畅度都将提升。

问题的解决

2021-4-4发布的TinEngine-2.2.9中,已经解决了这个问题,TinText可以安全地使用线程了。

需要注意的是,TinText本身不提供独立线程的渲染,多线程渲染需要自己编写线程代码实现。此次更新只是为了解决TinText能否使用多线程,而不是提供新的方法

代码模板

因为进行了更新,可以直接将TinText的渲染代码放在多线程函数中。以下是代码片段:

#...

_tin='''<title>多线程测试
<main>下面将暂停10秒
<stop>10
<main>暂停结束……;center;red
;这里采用暂定十秒的标记,为了使对比更加明显
'''

def thread_paint():#多线程渲染
    tin.point_file(_tin.split('\n'))
    #2.3.1以上版本使用以下代码
    #tin.point_file(_tin)
def common_paint():#普通渲染
    tin.point_file(_tin.split('\n'))
    #2.3.1以上版本使用以下代码
    #tin.point_file(_tin)

tin=TinText(root,font=('楷体',12))
tin.pack(fill='both',expand=True)
th=threading.Thread(target=thread_paint)
th.start()
#command_paint()

#...

效果显而易见,在暂停选的同时,多线程代码依然能够操作窗口,而普通渲染则无法操控窗口。


结语

TinEngine必将越来越强大。(透:往后会加入代码标签,增强交互性~~)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值