§3.3 文本类控件¶
字数 911 个 代码 18 行 图片 8 张 阅读时间 3 分钟 访问量
一、文本类控件简述¶
1.1 什么是文本类控件¶
文本类控件就是功能主要与文本有关的一类控件,最典型的就是输入框控件了。由于涉及文本的相关功能多且复杂,因此 tkt 目前对文本类控件的支持还不是很好,某些功能还没有完全实现。
目前 tkt 内置的文本类控件有 InputBox
以及实验性支持的 SpinBox
。但这两个都是对于单行文本进行操作的控件,关于多行文本的控件,将在未来加入 tkt。
1.2 它们是如何运作的¶
其实,tkt 的文本类控件不像前面章节讲的那些控件一样,文本类控件实现起来非常复杂,为了遵循 tkt 一切都是绘制出来的宗旨以及实现某些特殊的功能,tkt 不得不做了妥协,借用 tkinter
中相对底层的 API 来“重绘”文本类控件,而不是直接使用 tkinter
的文本控件。
文本类控件需要实现大量功能,如复制、剪切、粘贴、文本选中、光标显示、文本显示、换行处理、字符替换等等,其中最复杂的莫过于文本的显示和选中了。我们知道一个输入框应该是有一定范围的,超出这个范围的字符是不会显示的,但 tkt 中的一切都是用画布绘制的,只能绘制,无法擦除,导致 tkt 无法像其它 UI 框架那样直接限制文本的范围来呈现出一种文本被切割的样子,tkt 只能通过控制字符显示的数量来达到类似的效果。而不同字符的宽度并不相同,更别说还要根据字体来计算,这就极大地增加了实现文本显示以及文本选中的功能的难度。
1.3 目前存在的缺陷¶
目前 tkt 对于文本类控件还是实现了一定的基本功能,但仍存在一些问题,如文本选中不完善,无法选中“框外隐藏”的文本,这一功能同时导致了全选功能只能选中显示出来的文本,而非真正的全选。不过在未来会实现这个功能的,目前只是暂时未实现而已。
上述缺陷也间接导致了控件 SpinBox
只能实验性支持,因为其调整值的功能无法正常运作,徒有外观罢了。
二、文本类控件详述¶
2.1 InputBox
¶
InputBox
就是输入框控件,是 tkinter
的控件 Entry
的平替,但相对 Entry
又有增强。我们可以通过设定其各个初始化参数来达到相应的要求,如通过设置参数 align
来设定文本的靠左、居中和靠右,设置参数 show
来替换原来显示的字符,设置参数 placeholder
来设定一个提示文本等。
下面是一个简单的示例,其设定一个提示文本,在控件内容为空且处于 "normal"
状态时,会以灰色显示这个提示文本:
效果如下:
2.2 SpinBox
¶
experimental
:实验性支持,功能不完善且存在缺陷
从名称上就知道,这个控件对标的就是 tkinter
的 SpinBox
控件,功能类似的,不再赘述。
下面是一个简单的示例:
效果如下: