@TOC
前言
本文只作为笔记记录。
“tkinter.Text是仅次于Canvas的高丰富自由度的控件”,这句话在旧版TinML实现笔记中就写道。
这两个控件的具体讲解当然不是本文的重点,但是得知道,tkinter中的画布自由度绝对高于文本框,许多文本框实现不了的功能,可以交给画布实现。
关于tkinter画布的高可定制性,可见我的另一个小项目,基于tkinter画布的现代元素控件库。
本文将以TinML的<n>(<note>)
标签为例,讲解新TinML实现中关于内置控件的设计。
内置控件拓展
在TinText(软件项目名称)的渲染器实现由/lib/TinEngine
负责,TinText在TinEngineCore.py
中实现,
为了保持核心文件内部的功能单纯,TinEngine另开一个controls.py
文件,用来创建需要额外拓展的内置控件。
说明与引用文本段的内置控件定义如下:
class TinTextNote(tk.Canvas):
#TinText的引用说明框
def __init__(self,tintext,width,notes,font,markcolor,fg,bg,markbg):
"""
notes:list
markcolor:str
fg:str
bg:str 画布颜色
markbg:str 文本背景色
"""
super().__init__(master=tintext,width=width