当前位置:网站首页>70行代码撸一个桌面自动翻译神器
70行代码撸一个桌面自动翻译神器
2022-07-30 14:55:00 【程序员枸杞.】
工作上经常需要与外国友人邮件沟通,奈何工作电脑没有安装有道词典一类的翻译软件,结合自己的需要,自己撸一个桌面翻译神器。
基本思路:基于PySimpleGUI开发桌面GUI→获取键盘输入→接入谷歌翻译API→爬虫获取翻译结果(其中涉及到正则表达式匹配翻译结果)→输出翻译结果→翻译完成。
PySimpleGUI是什么?
创建图形用户界面 (GUI)可能很困难, 有许多不同的Python GUI工具包可供选择。最常提到的前三名是 Tkinter, wxPython 和 PyQt (或PySide2). 但是PySimpleGUI的较新工具包,其目的是使创建GUI更加容易。
PySimpleGUI 主要的作用是成为Tkinter, wxPython和PyQt之上的抽象层。您可以将其视为包装器, 拉近设计者与GUI 的距离. 虽然建立GUI 变的很简单, 相对的有很多细节被忽略掉, 也就是说你只能按PySimpleGUI 所提供的功能来使用.这个版本是架设在Tkinter 之上, 当然还有其他的版本, 像是PySimpleGUIQt, PySimpleGUIWx, PySimpleGUIWeb, …
所以说优点呢, 就是简单, 缺点也是简单, 以下大约说明一下使用方法, 其他的 GUI 很难在短短一篇文章就能说个大槪.
使用步骤
引入库
代码如下(示例):
import reimport htmlfrom urllib import parseimport requestsimport PySimpleGUI as sg构建爬虫url
代码如下(示例):
url = 'http://translate.google.cn/m?q=%s&tl=%s&sl=%s'该处使用的url网络请求的数据,这里用到了%字符串格式化方法。需要用到三个参数:text——需要翻译的内容, to_language——目标语言类型, text_language——当前语言类型。
构建翻译函数
代码如下(示例):
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])print语句用于前期调试,调试成功之后可以注释掉,也可以忽略,不影响使用!
GUI搭建
代码如下(示例):
sg.theme('bluepurple') # 设置主题font = ("fangsong",12) # 字体仿宋,大小12menu = [["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") # 设置窗口名称,窗口布局,以及图标layout为GUI布局,采用列表的模式,根据行列进行排布。
逻辑执行语句
代码如下(示例):
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:[email protected]", title = '', font = font, auto_close = 1)window.close()windows.read()可以理解为监听,分别有事件event,返回值values。
while循环,当事件为空或者为“退出”是=时,结束循环,并退出。
Popup为消息提示弹窗,可以作为警告,提示,再确认的交互界面。
界面效果

总结
到这里,整个项目就已经完成了,涉及到的一些基础技能,还需要一点功力,好了,今天的分享就到这里,后续会更新如何使用pyinstaller进行打包分发使用。
【python学习】
学Python的伙伴,欢迎加入新的交流【君羊】:1020465983
一起探讨编程知识,成为大神,群里还有软件安装包,实战案例、学习资料
边栏推荐
- EST综述:eDNA的多种状态以及在水环境中持久性的认知
- 【重磅来袭】教你如何在RGBD三维重建中获取高质量模型纹理
- This editor actually claims to be as fast as lightning!
- Office Automation | Office Software and Edraw MindMaster Shortcuts
- Go to Tencent for an interview and let people turn left directly: I don't know idempotency!
- [Cloud native] Grayscale release, blue-green release, rolling release, grayscale release explanation
- 视频切换播放的例子(视频切换范例)代码
- 极验深知v2分析
- B+树索引页大小是如何确定的?
- TensorFlow custom training function
猜你喜欢

golang modules初始化项目

2022最新 | 室外单目深度估计研究综述

timed task corn

Local Transactions vs Distributed Transactions

类和对象(下篇)

Placement Rules 使用文档

How do luxury giants such as GUCCI and LV deploy the metaverse, should other brands keep up?

Sentinel

GeoServer + openlayers

Huawei issues another summoning order for "Genius Boys"!He, who had given up an annual salary of 3.6 million, also made his debut
随机推荐
《二舅》刷屏了!
Mac 中 MySQL 的安装与卸载
【云原生】灰度发布、蓝绿发布、滚动发布、灰度发布解释
vite 多页面应用刷新页面时,不会在当前路由中,会返回到根路由
MongoDB starts an error Process: 29784 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=14)
Office Automation | Office Software and Edraw MindMaster Shortcuts
Excel uses Visual Basic Editor to modify macros
tiup clean
惊艳!京东T8纯手码的Redis核心原理手册,基础与源码齐下
tiup env
L2-007 家庭房产(vector、set、map的使用)
MySql error: SqlError(Unable to execute query", "Can't create/write to file OS errno 2 - No such file...
What is Ts?
调试 - 笔记
使用 TiUP 命令管理组件
Nature Microbiology综述:聚焦藻际--浮游植物和细菌互作的生态界面
Mysql数据库查询好慢,除了索引,还能因为什么?
CMake库搜索函数居然不搜索LD_LIBRARY_PATH
Sentinel
B+树索引页大小是如何确定的?