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

news/2024/4/28 12:08:55/文章来源:https://blog.csdn.net/2202_75568470/article/details/137061914

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1026747.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Element-Plus下拉菜单边框去除教程

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

python中函数那点事

1.求一个十进制的数值的二进制的0、1的个数 。 2.实现一个用户管理系统(要求使用容器保存数据)[{name: xxx, pass: xxx, ... ... },{},{}] 3.求1~100之间不能被3整除的数之和 4.给定一个正整数N,找出1到N(含)之间所有质数的总和 5.计算PI(公式如下:PI4(1-1/31/5-1/71/9-1......…

简单了解原型模式

什么是原型模式 区别于单例模式&#xff0c;原型模式的一个类可以有多个实例化的对象。 原型模式通过拷贝来产生新的对象&#xff0c;而不是new&#xff0c;并且可以根据自己的需求修改对象的属性。 实现Cloneable接口实现拷贝 而拷贝又分为浅拷贝和深拷贝&#xff0c;两者在…

Codigger开发者篇:开启全新的开发体验(二)

在数字化浪潮中&#xff0c;开发者们始终在追求更加高效、便捷的开发工具与环境。Codigger&#xff0c;作为新一代开发、运营、使用私人应用的分布式操作系统&#xff0c;正是为这些追求者们量身打造的利器&#xff0c;Codigger是一个跨时代的颠覆式的创新。今天&#xff0c;我…

【python】flask执行上下文context,请求上下文和应用上下文原理解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

JAVA------基础篇

java基础 1.JDK JDK :java development kit JRE&#xff1a;java runtime environment JDK包含JRE java跨平台&#xff1a;因为java程序运行依赖虚拟机&#xff0c;虚拟机需要有对应操作系统的版本&#xff0c;而jre中有虚拟机。 当你想要在Linux系统下运行&#xff0c;则需要…

硅谷甄选项目笔记

硅谷甄选运营平台 此次教学课程为硅谷甄选运营平台项目,包含运营平台项目模板从0到1开发&#xff0c;以及数据大屏幕、权限等业务。 此次教学课程涉及到技术栈包含***:vue3TypeScriptvue-routerpiniaelement-plusaxiosecharts***等技术栈。 一、vue3组件通信方式 通信仓库地…

华为ensp中vrrp虚拟路由器冗余协议 原理及配置命令

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人&#xff01; ————前言————— VRRP&#xff08;Virtual Router Redundancy Protocol&#xff0c;虚拟路由器冗余协议&#xff0…

9.HelloWorld案例常见问题

文章目录 一、BUG二、BUG的解决三、HelloWorld常见问题 一、BUG BUG&#xff08;小甲虫&#xff09;。计算机刚开始出现的时候&#xff0c;因为体积比较大&#xff0c;一些小虫子很容易转进去。有一天有一只蟑螂钻到了计算机当中&#xff0c;从而导致计算机不能正常运行&#…

SQLiteC/C++接口详细介绍sqlite3_stmt类(八)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;七&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;九&#xff09; 27、sqlite3_column_int 函数 sqlite3_column_int 用于返…

[Flutter] Flutter多环境版本管理器Puro, 可是试试替换Fvm了

flutter2/3版本切换,除了fvm,还可以看看puro Puro官网 Mac安装方式 curl -o- https://puro.dev/install.sh | PURO_VERSION"1.4.5" bash因为puro安装flutter需要依赖git, 请确保mac支持git命令行 brew install git快速开始 先看效果 1.创建flutter环境 这里的…

Bayes-RF,基于贝叶斯Bayes优化算法优化随机森林RF数据回归预测(多输入单输出)-MATLAB实现

Bayesian optimization 是一种用于调节机器学习模型超参数的方法&#xff0c;而随机森林 (Random Forest, RF) 是一种强大的机器学习算法&#xff0c;常用于回归和分类任务。将它们结合起来可以提高模型性能&#xff0c;这就是 Bayes-RF 的基本思想。 下面是一个基于贝叶斯优化…

基于双vip+GTID的半同步主从复制集群项目(MySQL集群)

项目标题&#xff1a;基于keepalivedGTID的半同步主从复制MySQL集群 准备七台机器&#xff0c;其中有四台时MySQL服务器&#xff0c;搭建主从复制的集群&#xff0c;一个master&#xff0c;2个slave服务器&#xff0c;一个延迟备份服务器。同时延迟备份服务器也可以充当异地备…

Linux的介绍以及其发展历史

文章目录 前言一、技术是推动社会发展的基本动力1.人为什么能成为万物之长呢&#xff1f;2.人为什么要发明工具&#xff0c;进行进化呢&#xff1f;3.人是如何发明工具的&#xff1f;4.为什么要有不同的岗位和行业&#xff1f; 二、计算机(操作系统)发展的基本脉络1.第一台计算…

Java安全 反序列化(4) CC1链-LazyMap版

Java安全 反序列化(4) CC1链-LazyMap版 实验环境:存在漏洞的版本 commons-collections3.1-3.2.1 jdk 8u71之后已修复不可利⽤ 文章目录 Java安全 反序列化(4) CC1链-LazyMap版一.跟踪挖掘CC1_LazyMap原理二.完整CC1_Lazy版Poc 接着上一篇文章我们通过ChainedTransFormer实现任意…

面试算法-122-翻转二叉树

题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 解 class Solution {public TreeNode invertTree(TreeNode root) {return dfs(…

在面对API的安全风险,WAAP全站防护能做到哪些?

随着数字化转型的加速&#xff0c;API&#xff08;应用程序接口&#xff09;已经成为企业间和企业内部系统交互的核心组件。在应用程序开发过程中&#xff0c;API能够在不引起用户注意的情况下&#xff0c;无缝、流畅地完成各种任务。例如从一个应用程序中提取所需数据并传递给…

SinoDB系统数据库

在SinoDB数据库的一个实例中&#xff0c;存在多个数据库&#xff0c;分为系统数据库和用户数据库。系统数据库在实例初始化时自动创建&#xff0c;存放实例级别上的监控信息、数据字典信息&#xff0c;用户能够访问而不能修改这些数据。用户数据库由用户根据需要创建&#xff0…

[STM32] Keil 创建 HAL 库的工程模板

Keil 创建 HAL 库的工程模板 跟着100ASK_STM32F103_MINI用户手册V1.1.pdf的第7章步骤进行Keil工程的创建。 文章目录 1 创建相关文件夹2 创建“main.c/h”和“stm32f1xx_clk.c/h”3 复制CMSIS和HAL库4 创建新的Keil工程5 添加组文件夹和工程文件6 配置Keil设置 1 创建相关文件…

项目2-用户登录

1.创建项目 2.引入前端代码并检查是否有误 3.定义接口 需求分析 对于后端开发⼈员⽽⾔, 不涉及前端⻚⾯的展⽰, 只需要提供两个功能 1. 登录⻚⾯: 通过账号和密码, 校验输⼊的账号密码是否正确, 并告知前端 2. ⾸⻚: 告知前端当前登录⽤⼾. 如果当前已有⽤⼾登录, 返回登录的账…