import tkinter as tk
from tkinter import messagebox
def change_text_color(color):
# 获取选中的文本范围
start_index = text_widget.tag_ranges(tk.SEL)
if start_index:
# 如果文本被选中,只改变选中文本的颜色
tag_name = f"color_{color}"
# 移除选中文本上的所有颜色标签
for tag in text_widget.tag_names(start_index[0]):
if tag.startswith("color_"):
text_widget.tag_remove(tag, start_index[0], start_index[1])
# 添加新的颜色标签
text_widget.tag_add(tag_name, start_index[0], start_index[1])
text_widget.tag_config(tag_name, foreground=color)
else:
# 如果没有文本被选中(即全选文本),改变所有文本的颜色
text_widget.tag_remove("color_all", "1.0", tk.END)
text_widget.tag_add("color_all", "1.0", tk.END)
text_widget.tag_config("color_all", foreground=color)
def on_ctrl_y(event):
# 当按下Ctrl+Y时,调用change_text_color函数
change_text_color("red")
root = tk.Tk()
# 创建一个Text控件
text_widget = tk.Text(root)
text_widget.pack(fill=tk.BOTH, expand=True)
# 绑定Ctrl+Y快捷键
text_widget.bind("<Control-y>", on_ctrl_y)
# 创建菜单栏
menu_bar = tk.Menu(root)
# 创建颜色菜单
color_menu = tk.Menu(menu_bar, tearoff=0)
color_menu.add_command(label="Red", command=lambda: change_text_color("red"))
color_menu.add_command(label="Blue", command=lambda: change_text_color("blue"))
color_menu.add_command(label="Green", command=lambda: change_text_color("green"))
color_menu.add_command(label="Black", command=lambda: change_text_color("black"))
menu_bar.add_cascade(label="Color", menu=color_menu)
# 将菜单栏添加到窗口
root.config(menu=menu_bar)
root.mainloop()