当前位置:网站首页>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
一起探讨编程知识,成为大神,群里还有软件安装包,实战案例、学习资料
边栏推荐
猜你喜欢

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

RISC-V调用惯例

嵌入式开发:嵌入式基础知识——正确启动固件项目的 10 条建议

About the data synchronization delay of MySQL master-slave replication

JVM性能调优

GeoServer

分布式前修课:MySQL实现分布式锁

MongoDB starts an error Process: 29784 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=14)

Alluxio for Presto fu can across the cloud self-service ability

Extremely Knowing v2 Analysis
随机推荐
【云原生】灰度发布、蓝绿发布、滚动发布、灰度发布解释
HTTP缓存小结
【嵌入式】适用于Cortex-M3(STM32F10x)的IQmath库
Sentinel
分布式前修课:MySQL实现分布式锁
tiup help
惊艳!京东T8纯手码的Redis核心原理手册,基础与源码齐下
GeoServer
How do luxury giants such as GUCCI and LV deploy the metaverse, should other brands keep up?
Introduction to golang image processing library image
数字量输入模块io
SQL 优化这么做就对了!
Go to Tencent for an interview and let people turn left directly: I don't know idempotency!
GeoServer + openlayers
软件包 - 笔记
How to split microservices?
4 senior experts share the insider architecture design and implementation principles of Flink technology with years of experience in large factories
golang图片处理库image简介
Configuration - Notes
L2-007 家庭房产(vector、set、map的使用)