10 Scale组件
Scale组件跟Scrollbar滚动条组件很相似----都可以滚动、都是条形-----但是它们的使用范围不尽相同。Scale组件主要是通过滑块来表示某个范围的一个数字,可以通过修改选项设置范围以及分辨率(精度)。
当希望用户输入某个范围的一个数值,使用Scale组件可以很好地代替Entry组件,创建一个指定范围的Scale组件其实非常容易,只需要指定它的from和to两个选项即可。但由于from本身是Python的关键字,所以为了区分需要在后边紧跟一个下划线,如from_。
如下图所示:
使用get()方法获取当前滑动的位置:
如下图所示:
可以通过resolution选项控制分辨率(步长),通过tickinterval选项设置刻度:
如下图所示:
11 Text组件
前面已经学了不少组件:绘制单行文本使用Label组件多行选使用Listbox组件,输入框使用Entry组件,按钮使用Button组件,还有Radiobutton和Checkbutton组件用于提供单选或多选的情况,多个组件可以用Frame组件先搭建一个框架,这样组织起来会更加有条不絮。最后还学习了两个滚动的组件:Scrollbar和Scale、Scrollbar组件用于实现滚动条,而Scale则是让用户在一个范围内选择一个确定的值。
Text(文本) 组件用于显示和处理多行文本。在Tkinter的所有组件中,Text组件显得异常强大和灵活,它适用于处理多种任务,虽然该组件的主要目的是显示多行文本,但它长城被用于作为简单的文本编辑器和网页浏览器使用。
当创建一个Text组件的时候,它里面是没有内容的,为了给其插入内容,可以利用insert()方法以及INSERT或END索引号:
如下图所示:
Text组件不仅支持插入和编辑文本,它还支持插入image对象和widows组件。
如下图所示:
下面的代码将实现单击显示一张图片
如下图所示:
11.1 Indexes用法
Indexes(索引)是用来指向Text组件中文本的位置,跟Python的序列索引一样,Text组件索引也是对应实际字符之间的位置。
Tkinter提供一系列不同的索引类型,
"line.column"(行/列).
"line.end"(某一行的末尾)
INSERT.
CURRENT.
END.
user-defined marks.
user-defined tags("tag.first","tag.last").
selection(SELFIRST.SELLAST).
window coordinate("@x,y").
embedded object name(window,images)
expressions.
"line.column"
用行号和列号组成的字符串是常用的索引方式,它们将索引位置的行号和列号以字符串的形式表示出来(中间以"."分隔,例如"1.0").需要注意的是,行号以1开始,列号则以0开始,还可以使用一下语法构建索引:
"%d.%d" % (line, column)
指定超出现有文本的最后一行的行号,或超出一行中列数的列号都不会引发错误。对于这样的指定,Tkinter解释为已有内容的末尾的下一个位置。
需要注意的是,使用"行/列"的索引方式看起来像是浮点值。其实在需要指定索引的时候使用浮点值代替也是可以的:
如下图所示:
“line.end”
行号加上字符串".end"的格式表示为该行最后一个字符串的位置:
如下图所示:
INSERT(或“insert”)
对应插入光标的位置
CURRENT(或“current”)
对应与鼠标坐标最接近的位置。不过,如果你紧按鼠标任何一个按钮,会直接到你松开它才响应。
END(或“end”)
对应Text组件的文本缓冲区最后一个字符的下一个位置。
user-defined marks
user-defined marks是对Text组件中位置的命名。INSER和CURRENT是两个预先命名好的marks,除此之外可以自定义marks。
User-defined tags
User-defined tage代表可以分配给Text组件的特殊事件绑定和风格。可以使用“tag.first”(使用tag的未必能的第一个字符之前)和“tag.last”(使用tag的文本的最后一个字符之后)语法表示标签的范围:
selection(SELFIRST,SELLAST)
selection是一个名为SEL(或"sel")的特殊tag,表示当前被选中的范围,可以使用SELFIRST到SELLAST来表示这个范围。如果没有选中的内容,那么Tkinter会抛出一个TclError异常。
window coordinate("@x.y")
可以使用串口坐标作为索引。例如在一个事件绑定中,你可以使用以下代码找到最接近鼠标的字符:
embedded object name (window,images)
embedden object name用于指向在Text组件中嵌入的window和image对象。要引用一个window,只要简单地讲一个Tkinter组件实例作为索引即可。引用一个嵌入的image,只需要使用相应的PhotoImage和BitmapImage对象。
expressions
expressions用于修改任何格式的索引,用字符串的形式实现修改索引的表达式,具体表达式实现如表:
提示:只要结果不产生歧义,关键字可以被缩写,空格也可以省略。例如,“+ 5 chars”可以简写成"+5c"
在实现中,为了确保表达式为普通字符串,你可以使用str或格式化操作来创建一个表达式字符串。下面例子演示如何删除插入光标前面的一个字符。
领取专属 10元无门槛券
私享最新 技术干货