首页 > 编程语言 >基于Python实现多功能翻译助手(下)

基于Python实现多功能翻译助手(下)

时间:2024-03-31 23:30:58浏览次数:20  
标签:lang Python text 多功能 dest 助手 tk config history

        为了将上述步骤中的功能增强与扩展具体化为代码,我们将实现翻译历史记录功能、翻译选项配置以及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改进没有引入新的问题或错误。

 

标签:lang,Python,text,多功能,dest,助手,tk,config,history
From: https://blog.csdn.net/2202_75568470/article/details/137061914

相关文章

  • Python 爬虫html内存 re.findall 正则提取span
    前言全局说明爬虫html内存re.findall正则提取一、百度首页热搜(和百度原网页代码有修改)需求:提取内容文字。<ulclass="s-hotsearch-content"id="hotsearch-content-wrapper"><liclass="hotsearch-itemodd"data-index="0"><spanclass=&q......
  • Python数据结构与算法——数据结构(栈、队列)
    目录数据结构介绍列表栈栈的基本操作:栈的实现(使用一般列表结构即可实现):栈的应用——括号匹配问题队列队列的实现方式——环形队列 队列的实现方式——双向队列 队列内置模块栈和队列应用——迷宫问题栈——深度优先搜索 队列——广度优先搜索数据结构介绍......
  • Python数据结构与算法——数据结构(链表、哈希表、树)
    目录链表  链表介绍  创建和遍历链表  链表节点插入和删除  双链表  链表总结——复杂度分析哈希表(散列表)哈希表介绍哈希冲突哈希表实现哈希表应用树树树的示例——模拟文件系统二叉树二叉树的链式存储 二叉树的遍历二叉搜索树插入......
  • python str.format高级用法
    在Python2中,str.format()函数可以使用一些高级的格式化选项,下面是一些常用的高级用法:1.格式化数字可以使用格式化选项来控制数字的显示方式,例如:#将数字格式化为带千位分隔符的字符串n=1234567s="{:,}".format(n)print(s)#输出:1,234,567#将数字格式化为指定......
  • Python基础语法(四)
    目录一.while循环的基础语句二.while循环案例三.while循环的嵌套四.while循环嵌套的案例一.while循环的基础语句1.while的条件需得到布尔类型,True表示继续循环,False表示结束循环。2.需要设置循环终止的条件,如i+=1配合i<100,就能确保100次后停止,否则将无限循环。3......
  • Python与供应链-2预测误差及指数平滑需求预测模型
    主要介绍预测误差和指数平滑模型的相关理论,然后再通过Python的statsmodels封装的指数平滑函数预测需求。1预测误差预测误差是指预测结果与预测对象发展变化的真实结果之间的差距。这种误差分为绝对误差和相对误差。绝对误差是预测值与实际观测值的绝对差距,而相对误差则是这种......
  • python动态加载(三)
    classTestInstance:def__init__(self):#初始化库字典,存放找到的库self.lib=Proxy()#使用一个代理对象来模拟层级结构#加载库,这里只是模拟,实际中需要导入库模块self._load_libs()def_load_libs(self):#加载p......
  • vscode远程连接docker容器打断点调试python项目
    vscode远程连接服务器docker容器前提:本地和远程都安装docker插件。1.安装完docker插件后点击插件图标2.如果登录的账号没有docker权限的会会报权限不足,使用以下命令把用户加到docker权限组中sudogpasswd-a<当前登陆用户名>docker#从用户组中删除:sudogpasswd-d<当前......
  • 理解 Python 编程中 *args 与 **kwargs 的妙用
    文章目录一、形式参数与实际参数二、*args与**kwargs三、总结......
  • Python大数据为啥一定要用Numpy Array,靠着这份900多页的PDF面试整理
    1.内存占用更小适当地使用Numpy数组替代List,你能让你的内存占用降低20倍。对于Python原生的List列表,由于每次新增对象,都需要8个字节来引用新对象,新的对象本身占28个字节(以整数为例)。所以列表list的大小可以用以下公式计算:64+8*len(lst)+len(lst)*28字节而使......