這也是最近用 Tkinter 寫維運自動化軟體的總結經驗之一, 在此軟體的記錄檔管理功能中, 可以讓使用者輸入想要搜尋的字串, 然後在文字區域元件 Text 中用高亮度來標示該字串於文本中出現的地方. 以下用簡化的範例來說明作法.
下面的範例程式中, 使用簡單的 pack 排版方式放置一個 Entry 輸入框, Button 按鈕, 以及 Text 多行文字輸入框, 當按下按鈕時呼叫 search_text() 函式於 Text 元件的內容中做全文搜索, 利用索引逐步推進法找尋 Entry 輸入框中指定之字串直到文本末端, 當找到文本時就設定為高亮度顯示, 程式如下 :
import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.title('搜尋文本高亮度顯示測試')
root.geometry('400x300')
def search_text():
search_what=search_what_var.get() # 取得搜尋標的
text.tag_remove('highlight', '1.0', tk.END) # 移除全部高亮度顯示標籤
start='1.0' # 預設起始索引為文本開頭
while True: # 搜尋全部文本直到末端
start=text.search(search_what, start, stopindex=tk.END)
if not start: # 起始索引為 0 : 已到末端結束搜尋
break
end=f'{start}+{len(search_what)}c' # 末端字串
text.tag_add('highlight', start, end) # 將搜尋到的字串設為高亮度
start=end # 後軍當前軍, 移動開始索引到目前標的尾端
search_what_var=tk.StringVar() # 綁定 Entry 元件的字串變數
search_entry=tk.Entry(root, textvariable=search_what_var)
search_entry.pack()
search_btn=ttk.Button(root, text='搜尋', command=search_text)
search_btn.pack()
text=tk.Text(root)
text.pack(fill=tk.BOTH, expand=True)
text.tag_configure('highlight', background='yellow') # 設定 Text 高亮度為黃色
root.mainloop()
結果如下 :
處理函式 search_text() 並非我原創, 而是透過詢問 ChatGPT 改寫而來. ChatGPT 真是程式員的好幫手啊! 因為以後會重複用到, 所以特別寫個簡化範例來記錄作法.
沒有留言 :
張貼留言