为了将上述步骤中的功能增强与扩展具体化为代码,我们将实现翻译历史记录功能、翻译选项配置以及UI的改进。
-
翻译历史记录功能
import json # 假设有一个用于存储历史记录的json文件
HISTORY_FILE = 'translation_history.json' # 初始化历史记录列表
translation_history = [] def save_history(): with open(HISTORY_FILE, 'w', encoding='utf-8') as file: json.dump(translation_history, file, ensure_ascii=False, indent=4) def load_history(): global translation_history try: with open(HISTORY_FILE, 'r', encoding='utf-8') as file: translation_history = json.load(file) except FileNotFoundError: pass # 如果没有历史记录文件,则忽略异常 def add_to_history(source, target): translation_history.append({ 'source': source, 'target': target, 'timestamp': datetime.now().strftime('%Y-%m-%d %H:%M:%S') }) save_history() # 在translate函数中添加保存历史记录的逻辑
def translate(source_text): # ...(省略翻译逻辑) target_text = translator.translate(source_text, dest=dest_lang).text add_to_history(source_text, target_text) # ...(显示翻译结果) # 在程序开始时加载历史记录
load_history() # 添加一个历史记录窗口
def show_history(): history_window = tk.Toplevel(root) history_window.title("Translation History") history_list = tk.Listbox(history_window) history_list.pack(fill=tk.BOTH, expand=True) for entry in translation_history: history_list.insert(tk.END, f"{entry['timestamp']} - {entry['source']} => {entry['target']}") history_list.bind('<<ListboxSelect>>', lambda e: show_history_details(history_list.get(history_list.curselection()))) def show_history_details(entry): # 在这里可以添加代码来显示详细的翻译历史记录,比如弹出一个新窗口显示源文本和目标文本 pass # 添加历史记录菜单项和按钮
history_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="History", menu=history_menu)
history_menu.add_command(label="Show History", command=show_history) # 在程序开始时加载UI组件
load_history() # 确保在创建UI之前加载历史记录
root.config(menu=menu_bar) # 添加菜单栏到主窗口
-
翻译选项与配置
# 添加一个配置窗口
def show_configuration(): config_window = tk.Toplevel(root) config_window.title("Configuration") # 添加配置选项,比如目标语言选择、翻译引擎选择等 dest_lang_var = tk.StringVar(config_window) dest_lang_var.set(dest_lang) # 设置默认语言 dest_lang_label = tk.Label(config_window, text="Destination Language:") dest_lang_label.pack() dest_lang_combo = tk.ttk.Combobox(config_window, textvariable=dest_lang_var, values=LANGUAGES) dest_lang_combo.pack() # 添加保存配置按钮 save_button = tk.Button(config_window, text="Save", command=lambda: save_configuration(dest_lang_var.get())) save_button.pack() def save_configuration(lang): global dest_lang dest_lang = lang # 可以添加更多配置项的保存逻辑 # 在主窗口中添加配置菜单项
config_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="Configuration", menu=config_menu)
config_menu.add_command(label="Settings", command=show_configuration)
改进UI和用户体验
-
UI的改进通常涉及调整布局、添加图标、优化字体和颜色,以及提供用户反馈等。
-
下面是一些可以应用于我们翻译应用程序的UI改进代码片段:
import tkinter as tk
from tkinter import ttk # 调整布局
def create_widgets(): # 创建标签、输入框、按钮等 source_label = tk.Label(root, text="Source Text:") source_label.grid(row=0, column=0, sticky=tk.W) source_entry = tk.Entry(root, width=50) source_entry.grid(row=0, column=1) translate_button = tk.Button(root, text="Translate", command=lambda: translate_text(source_entry.get())) translate_button.grid(row=0, column=2) # ... 添加其他组件 # 添加状态栏 status_bar = tk.Label(root, text="", bd=1, relief=tk.SUNKEN, anchor=tk.W) status_bar.grid(row=1, column=0, columnspan=3, sticky=tk.EW) # 改进按钮样式 translate_button.config(width=15) translate_button['font'] = ('Calibri', 10, 'bold') # 添加图标
root.iconbitmap('translation_app_icon.ico') # 使用你自己的图标文件 # 优化字体和颜色
source_label.config(font=('Calibri', 12))
source_entry.config(font=('Calibri', 12))
translate_button.config(bg='lightblue', fg='black') # 提供用户反馈
def translate_text(text): # ...(省略翻译逻辑) target_text = translator.translate(text, dest=dest_lang).text result_label.config(text=target_text) status_bar.config(text="Translation completed!") # 添加短暂延迟后清除状态栏文本 root.after(2000, lambda: status_bar.config(text="")) # 创建主窗口
root = tk.Tk()
root.title("Translation App")
root.geometry("400x200") # 设置窗口大小 # 创建菜单栏和其他组件
create_widgets() # 运行主循环
root.mainloop()
- 请注意,这里的代码仅提供了UI改进的一些示例,并没有涵盖所有可能的改进。你可以根据自己的需求和审美进一步调整字体、颜色、图标、布局等。
- 另外,对于用户反馈,你可以使用
ttk.Progressbar
来显示翻译过程中的进度,或者使用ttk.Notebook
来组织不同功能的标签页。你还可以添加右键菜单、工具提示和快捷键等高级功能来进一步提升用户体验。
最后,别忘了在开发过程中经常测试你的应用程序,以确保UI改进没有引入新的问题或错误。