更新1:
2022年9月30日起,中国谷歌翻译 translate.google.cn 停止服务
因为本文使用的是谷歌翻译作为后台,谷歌翻译挂了之后这个小功能就没法用了。
代码如下:
import json import requests import PySimpleGUI as sg def translate(word): def get_response(word): url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null' key = {
'type': "AUTO", 'i': word, "doctype": "json", "version": "2.1", "keyfrom": "fanyi.web", "ue": "UTF-8", "action": "FY_BY_CLICKBUTTON", "typoResult": "true" } response = requests.post(url, data=key) if response.status_code == 200: return response.text else: print("调用失败") return None response = get_response(word) if response: result = json.loads(response) return result['translateResult'][0][0]['tgt'] else: return word, None def translate_window(): sg.theme('bluepurple') # 设置主题 font = ("fangsong", 12) # 字体仿宋,大小12 menu = [["Help", ["About", "Item", "Author"]],["生词本",["加入","查看","清空"]]] # 菜单栏设置 layout = [[sg.Menu(menu, tearoff=False)], [sg.Text(text='请输入待翻译的内容,根据内容自动翻译为中文/英文', size=(40, 1))], [sg.Multiline(key="-IN-", size=(60, 8), font=font)], [sg.Text(text='翻译结果', size=(30, 1))], [sg.Multiline(key="-OUT-", size=(60, 8), font=font)], [sg.Text(text='', size=(36, 1)), sg.Button("翻译", size=(6, 1)), sg.Button("清除", size=(6, 1)), sg.Button("退出", size=(6, 1)) ] ] window = sg.Window("自制桌面翻译器-youdao", layout, icon="CT.ico") # 设置窗口名称,窗口布局,以及图标 new_word = [] while True: event, values = window.read() if event in (None, "退出"): # 点击“X”或者“退出”按钮时才退出 break if event == "翻译": if values["-IN-"] == '': # 没写翻译内容时候的提示 sg.Popup("请输入要翻译的内容,谢谢!") else: # tar = translate(values["-IN-"], dic[values["to"]], dic[values["from"]]) tar = translate(values["-IN-"]) window["-OUT-"].Update(tar) if event == "清除": window["-IN-"].Update("") window["-OUT-"].Update("") if event == "About": sg.Popup("使用方法:", "'翻译'确认输入,并输出翻译结果", "'清除'清除已有输入,清空翻译的结果", "'退出'取消,并退出App", title='', font=font, auto_close=1) if event == "Item": sg.Popup("翻译类型:", "'输入类型' 输入的语言类型", "'输出类型' 输出的语言类型", title='', font=font, auto_close=1) if event == "Author": sg.Popup("作者简介:", "姓名:XXXXXX", "Wechat:XXXXXX", "E-mail:", title='', font=font, auto_close=1) if event == "加入": new_word.append(values["-IN-"]) sg.Popup("已加入",title='', font=font, auto_close=1) if event == "查看": sg.Popup(set(new_word), title='', font=font, auto_close=1) if event == "清空": new_word.clear() sg.Popup("已清空",title='', font=font, auto_close=1) window.close() if __name__ == '__main__': translate_window()
讯享网
效果图如下

讯享网

----------------------以下是正文------------------------------
自制一个翻译软件,并打包成exe
原文:70行代码撸一个桌面自动翻译神器!
代码:
讯享网import re import html
from urllib import parse import requests import PySimpleGUI as sg url = 'http://translate.google.cn/m?q=%s&tl=%s&sl=%s' def translate(text, to_language="en", text_language="auto"): text = parse.quote(text) url1 = url % (text, to_language, text_language) response = requests.get(url1) data = response.text # print(data) expr = r'(?s)class="(?:t0|result-container)">(.*?)<' result = re.findall(expr, data) print(result) if (len(result) == 0): return "" return html.unescape(result[0]) def translate_window(): sg.theme('bluepurple') # 设置主题 font = ("fangsong", 12) # 字体仿宋,大小12 menu = [["Help", ["About", "Item", "Author"]]] # 菜单栏设置 value = ['汉语', '英语', '日语', '法语', '俄语', '自动'] # 语言选择(前端显示),默认只有6种,可以自己添加 var = ['zh', 'en', 'ja', 'fr', 'ru', 'auto'] # 语言选择(后端执行时) dic = dict(zip(value, var)) # 语言字典配置 layout = [[sg.Menu(menu, tearoff=False)], [sg.Text(text='Input', size=(26, 1)), sg.Text(text='将', size=(2, 1), justification='center'), sg.Combo(values=value, key='from', size=(10, 1)), sg.Text(text='翻译为', size=(5, 1), justification='center'), sg.Combo(values=value, key='to', size=(10, 1))], [sg.Multiline(key="-IN-", size=(60, 8), font=font)], [sg.Text(text='Output', size=(30, 1))], [sg.Multiline(key="-OUT-", size=(60, 8), font=font)], [sg.Text(text='', size=(36, 1)), sg.Button("翻译", size=(6, 1)), sg.Button("清除", size=(6, 1)), sg.Button("退出", size=(6, 1))] ] window = sg.Window("自制桌面翻译器", layout, icon="CT.ico") # 设置窗口名称,窗口布局,以及图标 while True: event, values = window.read() if event in (None, "退出"): # 点击“X”或者“退出”按钮时才退出 break if event == "翻译": if values["to"] == '' or values["from"] == '': # 未选择语言类型时弹窗提示 sg.Popup("请选择语言类型后重试,谢谢!") else: tar = translate(values["-IN-"], dic[values["to"]], dic[values["from"]]) window["-OUT-"].Update(tar) if event == "清除": window["-IN-"].Update("") window["-OUT-"].Update("") if event == "About": sg.Popup("使用方法:", "'翻译'确认输入,并输出翻译结果", "'清除'清除已有输入,清空翻译的结果", "'退出'取消,并退出App", title='', font=font, auto_close=1) if event == "Item": sg.Popup("翻译类型:", "'输入类型' 输入的语言类型", "'输出类型' 输出的语言类型", title='', font=font, auto_close=1) if event == "Author": sg.Popup("作者简介:", "姓名:XXXXXX", "Wechat:XXXXXX", "E-mail:", title='', font=font, auto_close=1) window.close() if __name__ == '__main__': translate_window()
上边就把主要逻辑完成了,运行py文件,即可得到如下效果:

1、新建一个虚拟环境(这样可以解决 exe 文件可能过大问题)


2、进入虚拟环境

3、激活虚拟环境(在cmd命令行窗口中输入:activate)

4、安装依赖包(cmd命令行中输入pip命令安装依赖包)
pip install requests pip install PySimpleGUI pip install pyinstaller
5、进行打包操作
讯享网pyinstaller -F -w D:\code\MyProject\translation\google_translation.py
第五步的时候碰到了问题,运行命令:pyinsatller -F -w google_translation.py
总是提示我:‘pyinsatller’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

这个应该是没有配置环境变量,网上很多方法教怎么配置环境变量,那种方法可行。但是没啥必要,因为环境变量的作用其实就是让系统知道这个命令在哪,然后去执行这个命令。
那么我们已经知道pyinstaller这个在哪里了,直接在那个文件夹下面执行命令就好了。
所以,先在cmd命令窗口里,用cd命令进入pyinstaller 所在的文件夹
把报错的命令:pyinsatller -F -w google_translation.py
改成
pyinstaller -F -w D:\code\MyProject\translation\google_translation.py
即可

扩展说明:
pyinstaller 指令的常见可选参数:
- -i 给应用程序添加图标
- -F 指定打包后只生成一个exe格式的文件
- -D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
- -c –console, –nowindowed 使用控制台,无界面(默认)
- -w –windowed, –noconsole 使用窗口,无控制台
- -p 添加搜索路径
6、打包完成的提示:

打包完成后,在当前的目录下,将会生成两个文件夹:build 和 dist。

dist 里面就是所有可执行 exe 文件

把这个文件发给其他人即可。
7、退出虚拟环境
deactivate
原文的核心代码逻辑没动,只是增加了打包成exe的过程。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/119450.html