英汉互译小程序

英汉互译小程序

1.原理和功能 

该小程序基于python爬虫改编的可视化程序。

主要利用了requests,thinker,pyttsx3,hashlib 实现的主要功能有英汉互译,计算哈希,播放单词的读音等简单功能

2.基本思路 

在网页打开百度翻译的在线翻译,通过输入post请求关键字,得到翻译结果是一串json数据。

import requests

post_url = 'https://fanyi.baidu.com/sug'
word = input('请录入一个单词:')
data = {'kw': word}
# 进行UA伪装
headers = {'输入自己的请求头'}
resp = requests.post(url=post_url, data=data, headers=headers)
# 获取响应数据:json()方法返回的是ojb()
dic_ojb = resp.json()
# print(dic_ojb)
data = dic_ojb
print("翻译结果:")
for item in data['data']:
	print(item['v'])
{'errno': 0, 'data': [{'k': 'word', 'v': 'n. 单词; 话语; 诺言; 消息 vt. 措辞,用词; 用言语表达 vi. 讲话'},
{'k': 'Word', 'v': '微软公司生产的文字处理软件。; [人名] 沃德'},
{'k': 'words', 'v': 'n. 字( word的名词复数 ); (说的)话; 诺言; 口令'},
{'k': 'Words', 'v': '[医]言语'},
{'k': 'WORDS', 'v': 'abbr. Western Operational Research Discussion Soci'}]}  

然后通过json数据的读取格式得到翻译结果

1 data=dic_ojb
2 print("翻译结果:")
3 for item in data['data']:
4     print(item['v'])

 接下来我们可以去创建一个窗体,在输入框中输入单词,在文本框中输出翻译结果。

1 import tkinter as tk
2 window=tk.Tk()
3 window.geometry("400x420")
4 window.mainloop()

可以得到一个窗体

 通过个性化设置,设置窗体的基本设置。

实现输入框,文本框,按钮

 1    window = tk.Tk()
 2     window.title("翻译工具")
 3     window.geometry("400x420")
 4     # 创建label,提示用户
 5     label = tk.Label(window, text="输入要翻译的单词:")
 6     label.pack()
 7     # 创建文本框,让用户何以在文本框内进行输入
 8     entry = tk.Entry(window)
 9     entry.pack()
10     # 创建按钮
11     button_frame = tk.Frame(window)
12     button_frame.pack()
13     # 创建翻译按钮,设置按钮的基本情况
14     translate_button = tk.Button(button_frame, text="英译汉", command=translate_word_thread)
15     translate_button.pack(side=tk.LEFT)
16     # 同上
17     reverse_translate_button = tk.Button(button_frame, text="汉译英", command=translate_word_thread)
18     reverse_translate_button.pack(side=tk.LEFT)
19     # 播放按钮
20     speak_button = tk.Button(button_frame, text="", command=speak_word_thread)
21     speak_button.configure(background="#FF0001", foreground="#FFFFFF")
22     speak_button.pack(side=tk.LEFT)
23     # 重置按钮
24     reset_button = tk.Button(button_frame, text="重置", command=reset)
25     reset_button.configure(background="#FF0000", foreground="#FFFFFF")
26     reset_button.pack(side=tk.LEFT)
27 
28     result_text = tk.Text(window, state=tk.DISABLED)
29     result_text.pack()
30 
31     set_style()
32     window.mainloop()

想要让它读取,调用pyttsx3,实现文本转语音的功能

1 word = entry.get()
2     engine = pyttsx3.init()
3     engine.setProperty("rate", 100)
4     engine.setProperty("volume", 0.9)
5     engine.say(word)
6     engine.runAndWait()

最后添加计算哈希的模块

hashed_word = hashlib.sha256(word.encode()).hexdigest()

全部代码如下:

import tkinter as tk
import hashlib
import requests
import pyttsx3
from tkinter import ttk
from ttkthemes import ThemedStyle
from threading import Thread


def baidu_translate(word):
    post_url = 'https://fanyi.baidu.com/sug'
    data = {'kw': word}
    headers = {放入自己从网页中中的请求头}
    resp = requests.post(url=post_url, data=data, headers=headers)
    dic_obj = resp.json()
    data = dic_obj
    translations = [item['v'] for item in data['data']]
    return translations

#定义文本框内容
def translate_word():
    word = entry.get()
    translations = baidu_translate(word)
    hashed_word = hashlib.sha256(word.encode()).hexdigest()

    result_text.config(state=tk.NORMAL)
    result_text.delete('1.0', tk.END)
    result_text.insert(tk.END, f"原文: {word}\n")
    result_text.insert(tk.END, f"哈希值: {hashed_word}\n")
    result_text.insert(tk.END, "翻译结果:\n")
    if translations:
        for translation in translations:
            result_text.insert(tk.END, f"- {translation}\n")
    else:
        result_text.insert(tk.END, "没有翻译结果\n")
    result_text.config(state=tk.DISABLED)

# 定义播放助手
def speak_word():
    word = entry.get()
    engine = pyttsx3.init()
    engine.setProperty("rate", 100)
    engine.setProperty("volume", 0.9)
    engine.say(word)
    engine.runAndWait()

#  定义重置按钮
def reset():
    entry.delete(0, tk.END)
    result_text.config(state=tk.NORMAL)
    result_text.delete('1.0', tk.END)
    result_text.config(state=tk.DISABLED)


def set_style():
    style = ThemedStyle(window)
    style.set_theme("arc")
    style.configure("TLabel", font=("Arial", 12), foreground="#333333", background="#FDFDFD")
    style.configure("TEntry", font=("Arial", 12))
    style.configure("TButton", font=("Arial", 12), background="#4CAF50", foreground="white",
                    borderwidth=0, relief="raised", padding=10)


def create_window():
    global window, entry, result_text

    window = tk.Tk()
    window.title("翻译工具")
    window.geometry("400x420")
    # 创建label,提示用户
    label = tk.Label(window, text="输入要翻译的单词:")
    label.pack()
    # 创建文本框,让用户何以在文本框内进行输入
    entry = tk.Entry(window)
    entry.pack()
    # 创建按钮
    button_frame = tk.Frame(window)
    button_frame.pack()
    # 创建翻译按钮,设置按钮的基本情况
    translate_button = tk.Button(button_frame, text="英译汉", command=translate_word_thread)
    translate_button.pack(side=tk.LEFT)
    # 同上
    reverse_translate_button = tk.Button(button_frame, text="汉译英", command=translate_word_thread)
    reverse_translate_button.pack(side=tk.LEFT)
    # 播放按钮
    speak_button = tk.Button(button_frame, text="", command=speak_word_thread)
    speak_button.configure(background="#FF0001", foreground="#FFFFFF")
    speak_button.pack(side=tk.LEFT)
    # 重置按钮
    reset_button = tk.Button(button_frame, text="重置", command=reset)
    reset_button.configure(background="#FF0000", foreground="#FFFFFF")
    reset_button.pack(side=tk.LEFT)

    result_text = tk.Text(window, state=tk.DISABLED)
    result_text.pack()

    set_style()
    window.mainloop()


def translate_word_thread():
    t = Thread(target=translate_word)
    t.start()


def speak_word_thread():
    t = Thread(target=speak_word)
    t.start()


create_window()

运行结果如下:

 

posted @ 2023-07-05 11:43  PaleKernel  阅读(158)  评论(0)    收藏  举报