相关思路及步骤:

1. 导入所需的库:hashlib(用于MD5加密)、json(用于处理返回的JSON数据)、random(用于生成随机数)、time(用于获取时间戳)、requests(用于发送HTTP请求)和tkinter(用于创建GUI界面)。如果没有下载,可使用以下指令进行下载:

pip install packagename/包名 # example pip install requests

2. 定义一个名为Translate的类,其中包含一个构造函数、一个清空输入框的函数、一个清空输出框的函数和一个翻译函数。

3. 在构造函数中,创建一个名为window的tkinter窗口,设置窗口标题为“英汉互译”,禁止调整窗口大小,创建一个输入框、一个文本展示框和三个按钮。

4. 定义一个名为gui_arrang的函数,用于完成页面元素布局,设置各部件的位置。

5. 定义一个名为fanyi的函数,用于实现翻译功能。首先获取输入框中的文本,然后获取时间戳和随机数,将它们组合成一个字符串作为salt。对输入的文本进行MD5加密,得到sign。然后发送POST请求到翻译接口,获取返回的JSON数据,解析后得到翻译结果。最后将翻译结果添加到输出框中。

6. 定义一个名为cle的函数,用于清空输出框的内容。

7. 定义一个名为cle_e的函数,用于清空输入框的内容。

8. 在主函数main中,创建一个Translate对象,调用gui_arrang函数,进入tkinter的主循环。

 

代码如下: 

import hashlib
import json
import random
import time
import requests
from requests.exceptions import RequestException
import tkinter as tk


class Translate:
    def __init__(self):
        # 创建window窗口
        self.window = tk.Tk()
        # 定义窗口名称
        self.window.title("英汉互译")
        # 禁止调整窗口大小
        self.window.resizable(0, 0)
        # 创建一个输入框,并设置尺寸
        self.input = tk.Entry(self.window, width=80, font='楷体')
        # 创建一个文本展示框,并设置尺寸
        self.info = tk.Text(self.window, height=10, font='楷体')
        # 添加一个按钮,
        self.t_button = tk.Button(self.window, text="翻译", width=10, height=1, font='楷体', command=self.fanyi)
        # 添加一个按钮,
        self.c_button1 = tk.Button(self.window, text="清空输入", width=10, height=1, font='楷体', command=self.cle_e)
        # 添加一个按钮,
        self.c_button2 = tk.Button(self.window, text="清空输出", width=10, height=1, font='楷体', command=self.cle)

    def gui_arrang(self):
        """完成页面元素布局,设置各部件的位置"""
        self.input.grid(row=0, sticky="W", padx=1)
        self.info.grid(row=1)
        self.t_button.grid(row=2, column=0, padx=2)
        self.c_button1.grid(row=3, column=0, padx=2)
        self.c_button2.grid(row=4, column=0, padx=2)

    def fanyi(self):
        words = self.input.get()
        # 获取时间戳
        lts = str(int(time.time() * 1000))
        # 获取一个0~10的随机整数,并转化为字符类型
        num = str(random.randint(0, 10))
        salt = lts + num
        # md5加密
        sign = hashlib.md5(("fanyideskweb" + words + salt + "Ygy_4c=r#e#4EX^NUGUc5")
                           .encode()).hexdigest()
        # 请求网址参数,作为翻译的数据传入请求接口
        data = {
            "i": words,
            "from": "AUTO",
            "to": "AUTO",
            "smartresult": "dict",
            "client": "fanyideskweb",
            "salt": salt,
            "sign": sign,
            "lts": lts,
            "bv": "37dd3c60883fcf3fdfbbfa8fa2c4565d",
            "doctype": "json",
            "version": "2.1",
            "keyfrom": "fanyi.web",
            "action": "FY_BY_REALTlME"
        }
        # 请求网址
        # 请求头,模拟浏览器发送请求
        url = ' https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
        header = {
            "Referer": 'https://fanyi.youdao.com/',
            "cookie": 'OUTFOX_SEARCH_USER_ID=-508254706@10.110.96.160; '
                      'OUTFOX_SEARCH_USER_ID_NCOO=355848745.519305; ___rl__test__cookies=1668344926319',
            "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
                          ' Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.42'
        }
        try:
            # 向浏览器发送请求
            res = requests.post(url, data=data, headers=header)
            # 返回json数据解析
            res_dic = json.loads(res.text)
            # print(res_dic)
            word = res_dic["translateResult"][0][0]["tgt"]
            # 输出翻译内容前,先清空输出框的内容
            self.info.delete(1.0, "end")
            # 将翻译结果添加到输出框中
            try:
                # 获取到res_dic列表中["smartResult"]["entries"]下的所有内容
                words_list = res_dic["smartResult"]["entries"][1:]
                word_list = [word.strip() for word in words_list]
                # print(word_list)
                for i in range(0, len(word_list)):
                    self.info.insert('end', word_list[i])
                    self.info.insert('end', '\n')
            except:
                self.info.insert('end', word)
        except RequestException:
            self.info.insert('end', "发生错误")

    def cle(self):
        """定义一个函数,用于清空输出框的内容"""
        self.info.delete(1.0, "end")  # 从第一行清除到最后一行

    def cle_e(self):
        """定义一个函数,用于清空输入框的内容"""
        self.input.delete(0, "end")


# 测试函数
def main():
    t = Translate()
    t.gui_arrang()
    tk.mainloop()


# 调试
if __name__ == '__main__':
    main()

效果展示:

python tkinter模块Text控件_前端