大家好,Stack Overflow的开发者们,
我希望这条消息能找到你。我想与你分享一个代码片段,它利用Python 3中的tkinter库创建一个窗口,其中包含一个文本小部件,一个“运行”按钮,以及“编辑”菜单下的“按前缀过滤”菜单选项。此代码的目的是允许用户在文本小部件中输入文本,并使用“按前缀过滤”选项指定前缀,然后单击“运行”按钮,过滤掉文本中不以指定前缀开头的单词。
然而,代码目前没有按预期运行。尽管遵循了tkinter的正确语法和结构,但前缀过滤操作没有提供所需的输出。单击“运行”按钮或从菜单中选择“前缀过滤”选项后,文本小部件中的文本将被完全删除,而不是根据指定的前缀进行过滤。
我已经彻底地检查了代码,经过进一步的调查,发现这个问题可能与filter_by_prefix有关()功能,由“运行”按钮和“按前缀过滤”菜单选项触发,该功能旨在从一个条目小部件中提取输入的前缀,从文本小部件中检索文本,执行过滤操作并使用过滤后的文本更新文本小部件。但是,该函数似乎没有按预期执行,导致删除文本小部件中的所有文本,而不是过滤它。下面是代码:
import tkinter as tk
from tkinter import messagebox
# Function to run the filter by prefix operation
def filter_by_prefix():
prefix = prefix_entry.get()
text = text_widget.get(1.0, tk.END)
lines = text.split('\n')
filtered_lines = []
for line in lines:
words = line.split()
filtered_words = [word for word in words if word.startswith(prefix)]
filtered_line = ' '.join(filtered_words)
filtered_lines.append(filtered_line)
filtered_text = '\n'.join(filtered_lines)
text_widget.delete(1.0, tk.END)
text_widget.insert(tk.END, filtered_text)
# Function to handle "Filter by Prefix" menu option
def on_filter_by_prefix():
prefix_window = tk.Toplevel(root)
prefix_window.title("Filter by Prefix")
prefix_window.geometry("300x100")
prefix_label = tk.Label(prefix_window, text="Enter prefix:")
prefix_label.pack()
global prefix_entry
prefix_entry = tk.Entry(prefix_window)
prefix_entry.pack()
prefix_button = tk.Button(prefix_window, text="Filter", command=filter_by_prefix)
prefix_button.pack()
# Create main window
root = tk.Tk()
root.title("Text Filter")
root.geometry("400x400")
# Create text widget
text_widget = tk.Text(root)
text_widget.pack(expand=True, fill=tk.BOTH)
# Create "Run" button
run_button = tk.Button(root, text="Run", command=filter_by_prefix)
run_button.pack()
# Create menu bar
menu_bar = tk.Menu(root)
root.config(menu=menu_bar)
# Create "Edit" menu
edit_menu = tk.Menu(menu_bar, tearoff=False)
menu_bar.add_cascade(label="Edit", menu=edit_menu)
# Add "Filter by Prefix" menu option
edit_menu.add_command(label="Filter by Prefix", command=on_filter_by_prefix)
# Run tkinter event loop
root.mainloop()
如果您能帮助我识别并解决此代码中的问题,我将不胜感激。您的专业知识和见解将非常宝贵,有助于我确定问题的根本原因,并找到解决方案,使代码按预期运行,即根据指定的前缀过滤文本,而不删除整个文本。
在此先感谢您的协助,并期待您的宝贵贡献。
1条答案
按热度按时间nbysray51#
我已经意识到这个错误是由于我的一个简单的疏忽。
我使用的文本小部件没有启用自动换行和滚动条,导致长行文本隐藏在可见窗口区域之外。我现在已经通过向文本小部件添加必要的功能解决了这个问题。