輸入部件的建立及其選項
import tkinter as tk
parent = tk.Tk()
w = tk.Entry(parent, option=value, ...)
選項 | 說明 |
---|---|
bg or background | 背景顏色 |
bd or borderwidth | 外框寛度 |
cursor | 在部件上方時, 滑鼠的圖樣 |
disabledbackground | disabled 時, 背景顏色 |
disabledforeground | disabled 時, 前景顏色 |
exportselection | 文字可否複製到剪貼簿 0/1 |
fg or foreground | 前景顏色 |
font | 文字字型 |
highlightbackground | 非聚焦時的聚焦顏色 |
highlightcolor | 聚焦時的聚焦顏色 |
highlightthickness | 聚焦厚度,內定 1, 0 則無 |
insertbackground | 插入游標的背景顏色, 內定為黑色 |
insertborderwidth | 插入游標外框寛度 |
insertofftime | 插入游標消失的時間, 內定為 300ms |
insertontime | 插入游標顯現的時間, 內定為 600ms |
invalidcommand | 驗證輸入錯誤回撥函式的註冊值 |
insertwidth | 插入游標寛度, 內定為 2 圖素, 至少為 insertborderwidth 的兩倍 |
justify | 文字在輸入部件中相對的位置, 內定為 LEFT, RiGHT/CENTER. |
readonlybackground | readonly 時的背景色 |
relief | 外框花樣, 內定為 SUNKEN |
selectbackground | 被選擇文字的背景顏色 |
selectborderwidth | 被選擇文字的外框寛度, 內定為 1 圖素 |
selectforeground | 被選擇文字的前景顏色 |
show | 代替顯示的文字, 如密碼輸入為 ‘*’ |
state | NORMAL, DISABLED, disabled (仍可以複製內容到剪貼簿) |
takefocus | TAB 鍵在部件是否會迴圈焦點 0/1 |
textvariable | 輸入部件中的文字內容, 必須使用 StringVar() |
validate | 指定何時使用回撥函式驗證 |
validatecommand | 驗證輸入回撥函式的註冊值 |
width | 部件字寛, 內定為 20 個標準字寛 |
xscrollcommand | 水平滾動條 scrollbar.set () 方法 |
方法及說明
方法 | 說明 |
---|---|
delete(first, last=None) | 刪除first ~ last (不含)的文字, last None 則只有在 first 的一個字 |
get() | 返回輸入件中的文字 |
icursor(index) | 設游標的index 之前的位置 |
index(index) | 如果文字過長, 無法完全顯示, 用來設定最左的可顯示位置 |
insert(index, s) | 在index 前插入字串s |
scan_dragto(x) | 滑鼠鍵按下事件處理程式中已標記位置時,滑鼠滾動事件處理程式拖弋捲動部件,x 為位置 |
scan_mark(x) | 滑鼠鍵按下事件處理程式中標記位置x |
select_adjust(index) | 調整文字選擇區以包含索引index |
select_clear() | 去除選擇 |
select_from(index) | 設定選擇區的起始索引處index |
select_present() | 目前是否有選擇區 |
select_range(start, end) | 選擇first ~ last (不含)的文字 |
select_to(index) | 選擇ANCHOR ~ index (不含)的文字 |
xview(index) | 供水平滾動條scrollbar 選項command 使用 |
xview_moveto(f) | 移動水平滾動條, f 為 0 ~ 1 |
xview_scroll(number, what) | 水平滾動畫布number 個單位,單位what 為UNITS 或PAGES , UNITS 為字寛, PAGES 的大小為頁, 正值向右, 負值向左 |
輸入驗證
回撥函式檢查輸入的文字若合乎要求, 返回 True, 否則返回 False.
在使用回撥函式之前, 必須先呼叫 register(回撥函式), 會返回一個字串 f, 用來呼叫函式.
使用 validatecommand/invalidcommand 指定回撥函式, validate 指定何時使用回撥函式.
validate
- ‘focus’ - 在失去或得到聚焦時驗證
- ‘focusin’ - 在得到聚焦時驗證
- ‘focusout’ - 在失去聚焦時驗證
- ‘key’ - 在任何輸入改變內容時驗證
- ‘all’ - 在所有情況下驗證
- ‘none’ - 不作驗證
validatecommand (invalidcommand)
- 如果回撥函式 (註冊值 f) 不需要任何引數, 使用 validatecommand = f
- 如果回撥函式 (註冊值 f) 需要一些引數, 使用 validatecommand = (f, s1, s2, …)
s1, s2, … 使用代替碼, 如- ‘%d’ 0 刪除, 1 插入, -1 失去或得到聚焦, 或 textvariable 內容變動
- ‘%i’ 刪除或插入的起始索引, -1 失去或得到聚焦, 或 textvariable 內容變動
- ‘%P’ 如果更動是允許的, 文字的內容將會是這個引數.
- ‘%s’ 文字變更前的內容
- ‘%S’ 刪除或插入的文字
- ‘%v’ validate 選項的值
- ‘%V’ 回撥函式被呼叫的原因, ‘focusin’, ‘focusout’, ‘key’, ‘forced’ textvariable 內容變動
- ‘%W’ 部件名
範例視窗及程式碼
from tkinter import *
def xscroll_handler(*event):
action, n = event[0:2]
if action == 'scroll':
units = event[2]
entry.xview_scroll(n, units)
elif action == 'moveto':
entry.xview_moveto(n)
def validatecommand(code, index, substring):
if code == '0':
label.configure(text=f'Delete "{substring}" at index {index}')
elif code == '1':
label.configure(text=f'Insert "{substring}" at index {index}')
else:
label.configure(text='Focus in, out or textvariable revised.')
return 1 if substring.isdigit() else 0
root = Tk()
font = ('Courier New', 16)
check = root.register(validatecommand)
entry = Entry(root, font=font, width=40, bg='darkgreen', fg='white',
validate='all', validatecommand=(check, '%d', '%i', '%S'))
entry.grid(row=0, sticky=E+W)
x_scrollbar = Scrollbar(root, orient=HORIZONTAL, command=xscroll_handler)
x_scrollbar.grid(row=1, sticky=E+W)
entry['xscrollcommand'] = x_scrollbar.set
label = Label('', width=40, font=font, bg='darkgreen', fg='white')
label.grid(row=2, column=0)
root.mainloop()
本作品採用《CC 協議》,轉載必須註明作者和本文連結