在 Python/Tkinter 基於文字編輯器中實現文字自動完成功能


文字自動完成功能是一個有用的特性,可以提高文字編輯器的效率並改善使用者體驗。它會自動建議部分輸入的單詞或短語的補全,從而減少手動輸入的工作量。

在本文中,我們將探討如何使用 Tkinter 庫在 Python 文字編輯器中實現文字自動完成功能。我們將逐步介紹整個過程,包括設定使用者介面、處理使用者輸入和實現自動完成功能。

先決條件

要學習本教程,您應該具備 Python 程式設計和 Tkinter 庫的基本知識。此外,請確保您的系統上已安裝 Python 和 Tkinter。

設定使用者介面

  • 匯入必要的模組

import tkinter as tk
import re
  • 建立主視窗並設定標題

window = tk.Tk()
window.title("Text Editor with Autocompletion")
  • 為使用者輸入建立一個文字小部件

text_widget = tk.Text(window)
text_widget.pack()

實現自動完成功能

  • 載入一個單詞字典 -

dictionary = ["apple", "banana", "cherry", "dog", "elephant", "fruit", "grape", "house", "internet"]
  • 定義一個函式來處理使用者輸入 -

def handle_input(event):
   current_text = text_widget.get("insert linestart", "insert")
   current_word = re.findall(r'\w+', current_text)[-1] if re.findall(r'\w+', current_text) else ""
   suggestions = [word for word in dictionary if word.startswith(current_word)]
    
   if suggestions:
      autocomplete = suggestions[0]
      text_widget.insert("insert", autocomplete[len(current_word):])
      text_widget.focus_set()
  • 將函式繫結到按鍵事件 -

text_widget.bind("<KeyRelease>", handle_input)

測試自動完成功能

  • 在末尾新增以下程式碼以啟動應用程式 -

window.mainloop()
  • 執行程式,將出現一個文字編輯器視窗。

  • 開始輸入載入的字典中的單詞,您會注意到在您鍵入時會出現自動完成功能建議。

示例

讓我們檢視完整的程式碼、其說明和輸出 -

# Import necessary libraries
import tkinter as tk
import re
# Create an instance of Tkinter Frame
window = tk.Tk()
# Set the geometry of Tkinter Frame
window.geometry("700x250")
# Set the title of Tkinter Frame
window.title("Text Editor with Autocompletion")
# Create a text widget for user input
text_widget = tk.Text(window)
text_widget.pack()
# Load a dictionary of words
dictionary = ["apple", "banana", "cherry", "dog", "elephant", "fruit", "grape", "house", "internet"]
# Define a function to handle user input
def handle_input(event):
   current_text = text_widget.get("insert linestart", "insert")
   current_word = re.findall(r'\w+', current_text)[-1] if re.findall(r'\w+', current_text) else ""
   suggestions = [word for word in dictionary if word.startswith(current_word)]
    
   if suggestions:
      autocomplete = suggestions[0]
      text_widget.insert("insert", autocomplete[len(current_word):])
      text_widget.focus_set()
# Bind the function to key press event
text_widget.bind("<KeyRelease>", handle_input)
window.mainloop()

說明

  • 我們首先匯入必要的模組,包括用於 GUI 操作的 tkinter 和用於正則表示式的 re。

  • 接下來,我們分別使用 Tk() 和 Text() 函式建立主視窗和文字小部件。文字小部件是使用者可以輸入文字的地方。

  • 我們將單詞列表定義為我們的字典。

  • handle_input 函式負責處理使用者輸入。它由 <KeyRelease> 事件觸發,該事件在使用者按下鍵後釋放鍵時發生。

  • 在 handle_input 函式內部,我們使用正則表示式從文字小部件中提取當前單詞。

  • 然後,我們遍歷字典並篩選出以當前單詞開頭的單詞。這些篩選後的單詞是自動完成功能的建議。

  • 如果有可用的建議,我們將獲取第一個建議並將單詞的剩餘部分插入文字小部件。

  • 最後,我們呼叫 text_widget.focus_set() 以確保文字小部件保持焦點以進行連續輸入。

  • 自動完成功能是透過將 handle_input 函式繫結到按鍵釋放事件來實現的。

輸出

執行程式時,將出現主視窗,使用者可以開始鍵入。當他們鍵入時,程式會根據載入的字典建議自動完成功能,並在可用時插入補全。

結論

總而言之,我們已成功在基於 Python/Tkinter 的文字編輯器中實現了文字自動完成功能。按照分步指南,您現在可以使用此有用的功能增強您的文字編輯器。自動完成功能允許使用者透過建議部分輸入的單詞或短語的補全來節省時間和精力。

在整個實現過程中,我們使用 Tkinter 設定了使用者介面,載入了一個單詞字典,並實現了自動完成功能邏輯。透過將 handle_input 函式繫結到按鍵釋放事件,我們根據使用者的輸入提供了即時建議。

請記住根據您的特定需求自定義字典,因為它會直接影響自動完成功能建議。您可以透過實現語法高亮、程式碼補全或搜尋功能等其他功能來進一步增強文字編輯器。

透過整合文字自動完成功能,您可以顯著改善 Python 文字編輯器的使用者體驗和效率。編碼愉快!

更新於: 2023年12月6日

359 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.