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