import tkinter as tk
def underline_text():
# 获取当前选中的文本范围
selected_text = text_widget.tag_ranges(tk.SEL)
if selected_text:
# 如果有文本被选中
tag_name = "underline"
# 检查选中文本是否已经有下划线
if text_widget.tag_names(selected_text[0]):
if "underline" in text_widget.tag_names(selected_text[0]):
# 如果有下划线,移除下划线
text_widget.tag_remove(tag_name, selected_text[0], selected_text[1])
else:
# 如果没有下划线,添加下划线
text_widget.tag_add(tag_name, selected_text[0], selected_text[1])
text_widget.tag_configure(tag_name, underline=True)
else:
# 如果没有其他标签,添加下划线
text_widget.tag_add(tag_name, selected_text[0], selected_text[1])
text_widget.tag_configure(tag_name, underline=True)
else:
# 如果没有文本被选中,处理全选文本
if "underline_all" in text_widget.tag_names():
# 如果全选文本有下划线,移除下划线
text_widget.tag_remove("underline_all", "1.0", tk.END)
else:
# 如果全选文本没有下划线,添加下划线
text_widget.tag_add("underline_all", "1.0", tk.END)
text_widget.tag_configure("underline_all", underline=True)
def on_ctrl_u(event):
# 当按下Ctrl+U时,调用underline_text函数
underline_text()
return "break" # 阻止默认的Ctrl+U行为
root = tk.Tk()
# 创建一个Text控件
text_widget = tk.Text(root)
text_widget.pack(fill=tk.BOTH, expand=True)
# 绑定Ctrl+U快捷键
text_widget.bind("<Control-u>", on_ctrl_u)
# 创建菜单栏
menu_bar = tk.Menu(root)
# 创建格式菜单
format_menu = tk.Menu(menu_bar, tearoff=0)
format_menu.add_command(label="Toggle Underline", command=underline_text)
menu_bar.add_cascade(label="Format", menu=format_menu)
# 将菜单栏添加到窗口
root.config(menu=menu_bar)
root.mainloop()