在学习Python的过程中,很多人最担心的问题就是英语单词,总感觉自己英文不好,学习起来会很辛苦。其实Python对英文基础没有太高的要求,遇到有些不懂的英文单词时,可以直接通过“在线翻译”网站翻译英文单词。目前国内比较优秀的翻译网站包括百度翻译、有道翻译、360翻译、阿里翻译、搜狗翻译等,它们不仅支持多语言翻译,还能满足不同场景和需求。
对于英语比较差的人来说,虽然离不开在线翻译网站,但是我们完全可以通过Python自己制作做一个翻译软件。要想实现翻译的功能,我们可以使用Python的Tkinter库构建简单的可视化GUI图形用户界面。
1、翻译软件介绍
我们的目标是开发一个翻译软件,我们将使用Tkinter库分别创建用户登录界面和翻译界面。在用户登录界面中,如果输入的账号是“admin”,且输入的密码是“123456”,则提示登录成功,并跳转到翻译界面。一旦用户出现三次登录失败,则会自动终止程序。
在翻译界面,可以实现英语和中文之间的相互翻译,把要翻译的内容输入到文本框里,再点击“翻译”按钮,将在“翻译结果”框中输出翻译结果,可以翻译单词,也可以翻译多个英文段落。
2、翻译软件界面演示
3、代码实现
(1)安装faker库
首先,确保你已经安装了faker库。如果还没有安装,可以通过pip安装:
pip install faker
(2)导入必要的库
import tkinter as tk
from tkinter import scrolledtext, ttk, messagebox
import requests, time, sys
from faker import Faker
这里导入了Tkinter库用于创建GUI应用图形界面。requests库用来发送HTTP请求。time库用于处理时间相关的操作。sys库是与Python解释器交互的核心标准库。Faker库是一个用于随机生成模拟数据的Python第三方库,主要用于生成看起来真实的测试数据,Faker库可以帮助开发者在测试阶段快速随机生成各种类型的虚拟数据,如姓名、地址、电子邮件、日期、文本、公司名等,虽然这些数据是假的,但看起来却像真实的数据,经常用于测试应用程序的表单验证、用户界面等场景。这里,我们利用Faker库创建一个随机虚拟的User-Agent(用户代理),它是Http协议中的一部分,属于请求头域的组成部分,User Agent也简称UA,是一个特殊的字符串头,是一种向目标访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核等信息的标识。
(3)实现翻译软件,完整代码如下所示:
import tkinter as tk
from tkinter import scrolledtext, ttk, messagebox
import requests, time, sys
from faker import Faker
# 随机生成伪数据,模拟生成客户端的环境信息
user = Faker().user_agent()
# 定义提交翻译的路径
url = 'https://fanyi.so.com/index/search'
# 定义HTTP请求头信息
headers = {
'Pro': 'fanyi',
'User-Agent': user
}
# 创建用户操作窗口
class TranslatorApp:
def __init__(self, root):
self.root = root
self.root.title("中英翻译器")
# 设置窗口居中
window_width = 490
window_height = 570
screen_width = self.root.winfo_screenwidth()
screen_height = self.root.winfo_screenheight()
x = (screen_width - window_width) / 2
y = (screen_height - window_height) / 2
self.root.geometry('%dx%d+%d+%d' % (window_width, window_height, x, y))
self.root.resizable(width=False, height=False)
# 创建“源语言”提示标签
source_label = tk.Label(root, text="源语言:", font=('黑体', 12))
source_label.grid(row=0, column=0, padx=10, pady=10)
# 创建方向提示标签
direction_label = tk.Label(root, text="-->", font=('黑体', 15))
direction_label.grid(row=0, column=1, padx=10, pady=10)
# 创建“目标语言”提示标签
target_label = tk.Label(root, text="目标语言:", font=('黑体', 12))
target_label.grid(row=0, column=2, padx=10, pady=10)
# 创建第一个语言选择下拉菜单
self.text_language1 = ['英语','中文']
self.source_var = tk.StringVar(root)
self.source_var.set('英语') # 自动检测语言
self.source_menu = ttk.Combobox(root, textvariable=self.source_var, values=self.text_language1, state='readonly', font=('黑体', 12))
self.source_menu.grid(row=1, column=0, padx=10, pady=10)
# 创建第二个语言选择下拉菜单
self.text_language2 = ['英语','中文']
self.target_var = tk.StringVar(root)
self.target_var.set('中文') # 默认英语
self.target_menu = ttk.Combobox(root, textvariable=self.target_var, values=self.text_language2, state='readonly', font=('黑体', 12))
self.target_menu.grid(row=1, column=2, padx=10, pady=10)
# 创建输入框
self.input_label = tk.Label(root, text="输入需要翻译的文本:", font=('黑体', 12))
self.input_label.grid(row=2, column=0, columnspan=3, padx=10, pady=10)
self.input_text = scrolledtext.ScrolledText(root, width=60, height=10)
self.input_text.grid(row=3, column=0, columnspan=3, padx=20, pady=10)
# 创建翻译按钮
self.translate_button = tk.Button(root, text="翻译", font=('黑体', 15), command=self.translate_text, width=5, height=1)
self.translate_button.grid(row=4, column=1, padx=10, pady=10)
# 创建翻译结果显示区域
self.output_label = tk.Label(root, text="翻译结果:", font=('黑体', 12))
self.output_label.grid(row=5, column=0, columnspan=3, padx=10, pady=10)
self.output_text = scrolledtext.ScrolledText(root, width=60, height=10)
self.output_text.grid(row=6, column=0, columnspan=3, padx=20, pady=10)
# 定义翻译函数
def translate_text(self):
# 获取输入的文本内容
enter_text = self.input_text.get("1.0", tk.END)
# 获取指定源语言
source_language = self.source_var.get()
# 获取目标语言
target_language = self.target_var.get()
if source_language == '英语' and target_language == '中文':
# 下面是提交的表单参数
information_data = {
"eng": "1",
"validate": "",
"ignore_trans": "0",
"query": enter_text
}
elif source_language == '中文' and target_language == '英语':
information_data = {
"eng": "0",
"validate": "",
"ignore_trans": "0",
"query": enter_text
}
else:
messagebox.showinfo("提示", "请选择要翻译的语言")
return
if enter_text.strip() == "":
messagebox.showinfo("提示", "请输入要翻译的内容!")
else:
try:
response = requests.post(url, headers=headers, data=information_data, proxies={"http": None, "https": None})
status = response.status_code
# 如果HTTP状态码是200,表示请求成功,服务器已成功返回请求的资源
if status == 200 :
# 获取返回的json数据
data = response.json()
results = data['data']['fanyi']
time.sleep(2)
# 清空翻译结果
self.output_text.delete("1.0", tk.END)
# 显示翻译结果
self.output_text.insert(tk.END, results)
else:
# 如果HTTP状态码不是200,则提示“翻译失败”
messagebox.showinfo("提示","翻译失败")
except Exception as e:
messagebox.showerror("错误", str(e))
# 创建登录窗口
class LoginWindow(object):
def __init__(self):
self.window = tk.Tk()
# 声明账号和密码两个变量
self.username = tk.StringVar()
self.password = tk.StringVar()
self.count=3
self.createForm()
def login(self):
# 判断如果输入的账号是“admin”和密码是“123456”,则登录成功
if self.username.get()=='admin' and self.password.get()=='123456':
messagebox.showinfo('登录', '登录成功!')
# 如果登录成功,则关闭登录窗口
self.window.destroy()
# 加载翻译主程序界面
root = tk.Tk()
app = TranslatorApp(root)
root.mainloop()
# 判断用户输入错误的次数,大于3次就结束程序
elif self.count==0:
messagebox.showinfo('警告!', '非法入侵!\n启动自动销毁模式!!!')
self.window.quit()
sys.exit(0)
else:
messagebox.showinfo('失败!', '账号或密码错误,你还有%d次机会' % self.count)
self.count-=1
# 定义退出函数
def user_quit(self):
self.window.destroy()
def createForm(self):
self.window.title('用户登录')
# 设置窗口居中
window_width = 280
window_height = 200
screen_width = self.window.winfo_screenwidth()
screen_height = self.window.winfo_screenheight()
x = (screen_width - window_width) / 2
y = (screen_height - window_height) / 2
self.window.geometry('%dx%d+%d+%d' % (window_width, window_height, x, y))
self.window.resizable(width=False, height=False)
# 创建“用户名”标签
name_label = tk.Label(self.window,text='用户名:',justify=tk.RIGHT,width = 100)
name_label.place(x=35,y=50,width=80,height=20)
# 创建“用户名”输入框
name_entry = tk.Entry(self.window, width=150, textvariable=self.username)
name_entry.place(x=110, y=50, width=120, height=20)
# 创建“密码”标签
password_label = tk.Label(self.window,text='密 码:', justify=tk.RIGHT,width=80)
password_label.place(x=35, y=80, width=80, height=20)
# 创建“密码”输入框
password_entry = tk.Entry(self.window, width=150,textvariable=self.password)
password_entry.place(x=110, y=80, width=120, height=20)
# 创建“登录”按钮
login_button = tk.Button(self.window,text='登录',command=self.login)
login_button.place(x=85,y=130,width=50,height=20)
# 创建“退出”按钮
quit_button = tk.Button(self.window,text='退出',command=self.user_quit)
quit_button.place(x=155,y=130,width=50,height=20)
self.window.mainloop()
# 当前模块直接被执行
if __name__ == "__main__":
# 启动登录窗口函数
LoginWindow()