我在工作中经常需要通过电子邮件与外国朋友交流。但是工作电脑上没有安装有道词典之类的翻译软件。根据自己的需要,我使用了一款桌面翻译神器。基本思路:基于PySimpleGUI开发桌面GUI→获取键盘输入→访问GoogleTranslateAPI→爬虫获取翻译结果(涉及正则表达式匹配翻译结果)→输出翻译结果→翻译完成。什么是PySimpleGUI?创建图形用户界面(GUI)可能很困难,并且有许多不同的PythonGUI工具包可供选择。最常提到的前三个是Tkinter、wxPython和PyQt(或PySide2)。但是PySimpleGUI的更新工具包,旨在使创建GUI更容易。PySimpleGUI的主要功能是作为Tkinter、wxPython和PyQt之上的抽象层。你可以把它想象成一个包装器,它缩短了设计者和GUI之间的距离。虽然构建GUI变得很简单,但是很多细节都被忽略了,也就是说你只能使用PySimpleGUI提供的功能。这个版本建立在Tkinter之上,当然还有其他版本,比如PySimpleGUIQt,PySimpleGUIWx,PySimpleGUIWeb,...所以优点很简单,缺点也很简单。以下是使用方法的概述。其他GUI很难做到一篇短文讲大故事。导入库代码步骤如下(示例):importreimporthtmlfromurllibimportparseimportrequestsimportPySimpleGUIassg构建爬虫url代码如下(示例):url='http://translate.google.cn/m?q=%s&tl=%s&sl=%s'这里使用的url网络请求数据,这里使用%字符串格式化方式。需要三个参数:text——待翻译的内容,to_language——目标语言类型,text_language——当前语言类型。构造翻译函数的代码如下(示例):deftranslate(text,to_language="en",text_language="auto"):text=parse.quote(text)url1=url%(text,to_language,text_language)响应=请求。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""returnhtml.unescape(result[0])打印语句用于前期调试。调试成功后可以注释掉或忽略。影响!GUI构建代码如下(示例):sg.theme('bluepurple')#设置主题字体=("fangsong",12)#字体仿宋,12号menu=[["Help",["About","Item","Author"]]]#菜单栏设置值=['Chinese','English','Japanese','French','Russian','Auto']#语言选择(前端显示),默认只有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='will',size=(2,1),justification='center'),sg.Combo(values=value,key='from',size=(10,1)),sg.Text(text='translateto',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")#设置窗口名称、窗口布局、图标布局到GUI布局,采用列表方式,按行列排列逻辑执行语句代码如下(示例):whileTrue:event,values=window.read()ifeventin(None,"Exit"):#仅当“X”或“Exit”按钮时退出isclickedbreakifevent=="Translation":ifvalues["to"]==''orvalues["from"]=='':#没有选择语言类型时弹出提示sg.Popup("请选择一种语言类型并重试,谢谢!")else:tar=translate(values["-IN-"],dic[values["to"]],dic[values["from"]])window["-OUT-"].Update(tar)如果事件=="Clear":window["-IN-"].Update("")window["-OUT-"].Update("")如果事件=="About":sg.Popup("Howtouse:","'Translate'确认输入并输出翻译结果","'Clear'清除已有输入并清除翻译结果","'Exit'取消并退出App",title='',font=font,auto_close=1)ifevent=="Item":sg.Popup("Translationtype:","'Inputtype'inputlanguagetype","'输出类型'输出语言类型",title='',font=font,auto_close=1)ifevent=="Author":sg.Popup("关于作者:",""X"姓名:XXXXX微信:XXXXXX","E-mail:XXXXXX@qq.com",title='',font=font,auto_close=1)window.close()windows.read()可以理解为监听,里面有事件分别返回值valueswhile循环,当事件为空或“exit”为=时,结束循环退出。Popup是消息提示弹窗,可以作为警告、提示、确认的交互界面。界面效果总结到这里,整个项目就完成了,涉及到的一些基本技巧还需要一点技巧,好了,今天的分享就到这里,后面会更新如何使用pyinstaller进行打包分发。以上就是本次分享的全部内容。觉得文章还不错的话,请关注公众号:Python编程学习圈,每日干货分享,发送“J”还能收到海量学习资料,涵盖Python电子书和教程,数据库编程、Django、爬虫、云计算等。或者去编程学习网了解更多编程技术知识。
