Python开发简易翻译软件

运行图

在这里插入图片描述

代码

#自动检测中文翻译英文,翻译单词,增加了键盘监听,CTRL+回车即可翻译
from urllib import request
from urllib import parse
import json
import requests
import random
import keyboard
from bs4 import BeautifulSoup
import tkinter as tk  # 使用Tkinter前需要先导入
def is_Chinese(ch):
    if '\u4e00' <= ch <= '\u9fff':
            return True
    return False
def fun(var):
    choice = 1
    if len(var)==0:
        return "翻译内容不可为空!"
    for i in var:
        if i==" ":
            choice=2
    if len(var)>3:
        for i in var:
            if is_Chinese(i)==True:
                choice=2
    else:
        choice=1
    if choice==1:
        s=''
        proxiesvalue = [
            {'http': 'http://121.232.148.167:9000'},
            {'http': 'http://39.105.28.28:8118'},
            {'http': 'http://113.195.18.133:9999'}
        ]
        post_url = "https://fanyi.baidu.com/sug"
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36 Edg/89.0.774.77'
        }
        data = {
            'kw': var
        }
        try:
            response = requests.get(url=post_url, headers=headers, params=data, proxies=random.choice(proxiesvalue))
            dic_obj = response.json()
        except:
            return "请求失败"
        else:
            if response.status_code == 200:  # 判断状态码
                for i, v in dic_obj.items():
                    if i == "data":
                        ls = v
                        if len(ls) == 0:
                            return "输入有误"
                for i in ls:
                    for k, v in i.items():
                        s+=(v+"\n")
                return s+"\n"
    elif choice==2:
        Request_URL = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
        form_data = {}
        form_data['i'] = var
        form_data['from'] = 'AUTO'
        form_data['to'] = 'AUTO'
        form_data['smartresult'] = 'dict'
        form_data['doctype'] = 'json'
        form_data['version'] = '2.1'
        form_data['keyfrom'] = 'fanyi.web'
        form_data['action'] = 'FY_BY_CLICKBUTTION'
        form_data['typoResult'] = 'false'
        data = parse.urlencode(form_data).encode('utf-8')
        response = request.urlopen(Request_URL, data)
        html = response.read().decode('utf-8')
        translate_results = json.loads(html)
        s=''
        for i in range(888):
            try:
                s += translate_results["translateResult"][0][i]['tgt']
            except:
                break
        return s+"\n\n"


    # 实例化object,建立窗口window
window = tk.Tk()

    # 给窗口的可视化起名字
window.title('开发者:Yesir')

    # 设定窗口的大小(长 * 宽)
window.geometry('800x500')  # 这里的乘是小x

# e = tk.Entry(window,  show = '*',width=80,bd=8,insertbackground = 'red',relief = 'sunken')  # 显示成明文形式
e=tk.Text(window, height=5,width=80)
e.pack()
    #调用函数,get text文本框内的信息,传给fun函数进行翻译
def insert_point():  # 在鼠标焦点处插入输入内容
    t.delete('1.0', 'end')
    var = e.get('1.0','end')
    data=''
    for i in var:
        if i!="\n":
            data+=i
    t.mark_set("insert", "%d.%d" % (0, 0))
    t.insert('insert', fun(data))

def abc(x):
    # a = keyboard.KeyboardEvent('down', 28, 'enter')
    # a = keyboard.KeyboardEvent("down",28,'enter')
    # if x.event_type == 'down' and x.name == a.name :
    #     insert_point()
    if keyboard.is_pressed('ctrl') and keyboard.is_pressed('enter'):
        t.delete('1.0', 'end')
        insert_point()
    elif keyboard.is_pressed('esc'):
        window.destroy()
        exit()
# def insert_end():  # 在文本框内容最后接着插入输入内容
#     tk.Label(window, text='\n\n\n\n', font=('Arial', 12), ).place(x=50, y=200, anchor='nw')
#     var = e.get()
#     t.insert('insert', fun(var))

tk.Label(window, text="开发者:Yesir",fg="#6950a1", bg="#feeeed", font=('Arial', 24), ).place(x=300, y=400, anchor='nw')
b1 = tk.Button(window, text='翻译', width=10,height=2, command=insert_point)
b1.pack()

    # 第7步,创建并放置一个多行文本框text用以显示
t = tk.Text(window, height=20)
t.pack()
keyboard.hook(abc)

    # 第8步,主窗口循环显示
window.mainloop()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值