Text 多行输入框
Text 是 tkinter 里用来让用户进行输入数据的“多行输入框”,这篇教学会介绍如何在 tkinter 视窗里加入 Text 多行输入框,并实作输入数据后进行互动的程序。
快速导览:
因为 Google Colab 不支援 tkinter,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda )。
加入 Text
建立 tkinter 视窗对象后,透过 Text 方法,就能在视窗对象中建立 Text 多行输入框,必要的参数有一个,第一个表示要加入的视窗对象,建立 Text 后再使用 pack() 方法将其加入 ( 参考 pack 参数设定 ),下方的程序码执行后,会在视窗里加入一个 Text ( 位置、大小和颜色都使用默认值 )。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
text = tk.Text(root) # 放入多行輸入框
text.pack()
root.mainloop()
Text 参数设定
加入 Text 之后,可以透过 Text的参数调整内容的样式,下方列出 Text 和其他元件相同的参数:
| 参数 | 说明 |
|---|---|
| width | 宽度,单位是字元数。 |
| height | 高度,单位是字元数。 |
| padx | 内容和标签左右边界的间距 ( px ),默认 1。 |
| pady | 内容和标签上下边界的间距 ( px ),默认 1。 |
| bg/background | 背景颜色,可以使用十六进制色码或颜色名称。 |
| fg/foreground | 文字颜色,可以使用十六进制色码或颜色名称。 |
| font | 字型设定,包含字体、大小 ( px )、粗体 ( bold )、斜体 ( italic )。 |
| justify | 多行文字的对齐方式,可以设定 left、right、center,默认 center。 |
| cursor | 鼠标移动到标签的样式,可以设定 arrow、circle、cross、plus...等,默认 arrow。 |
| relief | 边框样式,可以设定 flat、sunken、raised、groove、ridge、solid,默认 flat。 |
| bd/borderwidth | 边框粗细,默认 1。 |
| wrap | 换行方式,可设定 char ( 字元,默认 )、word ( 字 ) 或 none ( 不换行 )。 |
| tabs | 按下 tab 键时等于多少个空白字元。 |
下方是 Text 多行输入框行为相关的参数:
| 参数 | 说明 |
|---|---|
| selectborderwidth | 选取输入框内容的外框宽度。 |
| selectbackground | 选取输入框内容的背景颜色。 |
| selectforeground | 选取输入框内容的文字颜色。 |
| xscrollcommand | 与 set() 方法搭配,加上水平卷轴。 |
| yscrollcommand | 与 set() 方法搭配,加上垂直卷轴。 |
| state | 状态,tk.NORMAL 可使用 ( 默认 )、tk.DISABLED 不可使用。 |
Text 内容操作方法
透过下列方法,可以取得或删除 Text 多行输入框的内容,或针对内容进行一些相关操作:
| 方法 | 参数 | 说明 |
|---|---|---|
| get() | first, last=None | 取得输入框的内容,表示方式使用小数点,例如 0.0 代表第一行第一个字,1.1 表示第二行第二个字,1.end 表示第一行最后个字。 |
| delete() | first, last=None | 指定删除 first~last 区间的内容,表示方式使用小数点。 |
| see() | index | 取得第几个项目的字元,表示方式使用小数点。 |
| icursor() | index | 移动输入标记到指定内容索引值,表示方式使用小数点。 |
| index() | index | 取得指定的索引值。 |
| insert() | index, s | 在指定索引的位置 ( 例如 '0.0' 表示第一行第一个字 ) 插入内容。 |
| xview() | index | 如果文字过长,指定要看到哪个索引值。 |
| xview_scroll() | number, what | 卷动卷轴到指定位置。 |
点击按钮,显示或清空输入文字
下方的程序码放入一个 Label 和一个 Text,两个元件都使用 textvariable 共用变数 a,执行后当输入框内容发生改变,Label 的内容也会跟着变化。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
a = tk.StringVar() # 建立文字變數
a.set('') # 一開始設定沒有內容
label = tk.Label(root, textvariable=a) # 放入 Label
label.pack()
text = tk.Text(root, height=8) # 放入多行輸入框
text.pack()
def show():
a.set(text.get(1.0, 'end-1c'))
# 執行 show 函式時,將 a 變數內容改變
# 使用 end-1c 表示取得倒數第二個字元 ( 因為最後一個字元是換行符 )
def clear():
a.set('')
text.delete(1.0,'end')
# 執行 clear 函式時,清空內容
btn1 = tk.Button(root,text='show', command=show) # 放入顯示按鈕
btn1.pack()
btn2 = tk.Button(root,text='clear', command=clear) # 放入清空按鈕
btn2.pack()
root.mainloop()
微信扫码关注
抖音扫码关注