用Python实现翻译小工具 (GUI版)

今天带大家来实现一个翻译小工具

对接的接口是有道翻译的接口

然后实现了GUI界面

代码如下:

# -*- coding:utf-8 -*-
"""
Python制作翻译词典
"""
import requests
import json
import os
import base64
import tkinter as tk
from tkinter import messagebox

__author__ = 'Evan'


class Translate(object):

    def __init__(self):
        self.root = tk.Tk()
        self.root.geometry('480x820')
        self.root.title('翻译词典')
        self.translate_mapping = {'自动检测语言': 'Auto', '中文': 'zh-CH', '英语': 'en', '日语': 'ja', '韩语': 'ko',
                                  '法语': 'fr', '俄语': 'ru', '西班牙语': 'es', '葡萄牙语': 'pt', '越南语': 'vi',
                                  '德语': 'de', '印尼语': 'id', '阿拉伯语': 'ar'}
        self.build_select_menu()
        self.build_input_text()
        self.build_confirm_button()
        self.load_image()
        self.set_gui_space(window=self.root, x=2.5, y=4)

    def spider(self):
        # 请求头
        headers = {
            'Accept': 'application/json, text/javascript, */*; q=0.01',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'zh-CN,zh;q=0.9',
            'Cache-Control': 'no-cache',
            'Connection': 'keep-alive',
            'Content-Length': '38',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Host': 'aidemo.youdao.com',
            'Origin': 'http://ai.youdao.com',
            'Pragma': 'no-cache',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)'
                          ' Chrome/64.0.3282.186 Safari/537.36',
            'Referer': 'http://ai.youdao.com/product-fanyi-text.s',
        }
        # 请求链接
        url = 'https://aidemo.youdao.com/trans'
        # 请求参数
        payload = {'q': self.input_text.get(1.0, tk.END).strip(),
                   'from': self.translate_mapping[self.from_language.get()],
                   'to': self.translate_mapping[self.to_language.get()]}
        try:
            response = requests.post(url, data=payload, headers=headers)  # 请求数据
            data = json.loads(response.text)  # 将数据转为json格式
            if data['translation'][0] != self.input_text.get(1.0, tk.END).strip():  # 判断是否翻译成功
                return data['translation'][0]  # 返回翻译后的字符串
            else:
                return None
        except Exception:
            return None

    def build_confirm_button(self):
        tk.Button(self.root, text='翻译', command=self.translate, bg='LightSkyBlue').grid(row=3, column=0, sticky=tk.S, ipadx=30)
        tk.Button(self.root, text='清空', command=self.cleanup, bg='#98FB98').grid(row=7, column=0, sticky=tk.S, ipadx=30)

    def cleanup(self):
        self.input_text.delete(1.0, tk.END)
        self.output_text.delete(1.0, tk.END)

    def translate(self):
        input_text = self.input_text.get(1.0, tk.END).strip()
        if input_text:
            self.output_text.delete(1.0, tk.END)
            if self.spider():
                self.output_text.insert(tk.END, self.spider())
            else:
                self.output_text.insert(tk.END, '翻译失败!!!')
                messagebox.showerror('错误', '翻译失败,请重试!')
        else:
            messagebox.showwarning('警告', '请输入要翻译的文字!')

    def build_input_text(self):
        x_length = 1
        tk.Label(self.root, text='请输入要翻译的文字:').grid(row=2, column=0, sticky=tk.W)
        self.input_text = tk.Text(self.root, width=68, height=10)
        self.input_text.grid(row=3, column=0, sticky=tk.W)

        tk.Label(self.root, text='翻译结果:').grid(row=6, column=0, sticky=tk.W, padx=x_length)
        self.output_text = tk.Text(self.root, width=68, height=10)
        self.output_text.grid(row=7, column=0, sticky=tk.W, padx=x_length)

    def build_select_menu(self):
        select_list = [i for i in self.translate_mapping.keys()]
        x_length = 5
        tk.Label(self.root, text='翻译前语言:').grid(row=4, column=0, sticky=tk.W, padx=x_length)
        self.from_language = tk.StringVar()
        self.from_language.set('自动检测语言')
        menu1 = tk.OptionMenu(self.root, self.from_language, *select_list)
        menu1.config(bg='#AFEEEE')
        menu1.grid(row=4, column=0, sticky=tk.E, padx=x_length, pady=5)

        tk.Label(self.root, text='翻译后语言:').grid(row=5, column=0, sticky=tk.W, padx=x_length)
        self.to_language = tk.StringVar()
        self.to_language.set('中文')
        menu2 = tk.OptionMenu(self.root, self.to_language, *select_list)
        menu2.config(bg='#AFEEEE')
        menu2.grid(row=5, column=0, sticky=tk.E, padx=x_length)

    @staticmethod
    def set_gui_space(window, x, y):
        window.update_idletasks()
        x_info = (window.winfo_screenwidth() - window.winfo_reqwidth()) / x
        y_info = (window.winfo_screenwidth() - window.winfo_reqwidth()) / y
        window.geometry('+%d+%d' % (x_info, y_info))

    def load_image(self):
        iamge_name = 'bg.png'
        self.image = tk.PhotoImage(file=iamge_name)
        tk.Label(self.root, height=420, image=self.image).grid(row=0, column=0)


if __name__ == '__main__':
    translate = Translate()
    translate.root.mainloop()

在这里插入图片描述
一起学习python,小白指导,教学分享记得私信我

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miku丨无形

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值