【Python之GUI开发案例】用Python的tkinter开发聚合翻译神器

目录

一、效果演示

二、代码分解

三、获取python源码


一、效果演示

我用python的tkinter库开发了一个聚合翻译器,实现一键同时获取5个翻译工具的结果,包括:

有道翻译、百度翻译、必应翻译、360翻译、谷歌翻译。

首先,看一下演示效果:

我用python的tkinter库,开发了一个聚合翻译神器!

这个聚合翻译工具,核心代码是通过python网页爬虫和翻译网站API实现的翻译。

二、代码分解

首先,导入需要用到的库:

import tkinter as tk
import requests
import http.client
import hashlib
import urllib
import random
import json
from translate import Translator # 谷歌翻译库

由于我想让这个工具,支持中英双向翻译,所以我定义了一个函数,判断输入是中文还是英文:

def is_all_chinese(strs):
	"""检验是否是中文字符"""
	for _char in strs[0]:  # 判断第一个字符是否中文
		if not '\u4e00' <= _char <= '\u9fa5':
			return False
	return True

这个函数不太严谨,只判断了输入内容的第一个字符是中文还是英文,这样会导致如果输入既有中文又有英文,会出现判断失败。后续需要改进,改为判断全部输入内容。

然后,下面是依次针对每个翻译网站的网页爬虫、API爬取,实现翻译功能,这里就不贴Python源码了。

下面,重点讲解下用tkinter实现的GUI前台界面。

class TransTool():
	"""聚合翻译tkinter界面工具"""

	def __init__(self):
		self.window = tk.Tk()
		self.window.title("聚合翻译器 | 马哥python说")
		self.window.geometry("600x300+350+300")  # width x height + x + y
		self.l1 = tk.Label(self.window, text="输入内容:", font="微软雅黑 14", height=2)
		self.l1.grid()
		self.l2 = tk.Label(self.window, text="有道翻译:", font="微软雅黑 16", height=2)
		self.l2.grid()
		self.l3 = tk.Label(self.window, text="百度翻译:", font="微软雅黑 16", height=2)
		self.l3.grid()
		self.l3 = tk.Label(self.window, text="必应翻译:", font="微软雅黑 16", height=2)
		self.l3.grid()
		self.l3 = tk.Label(self.window, text="360翻译:", font="微软雅黑 16", height=2)
		self.l3.grid()
		self.l3 = tk.Label(self.window, text="谷歌翻译:", font="微软雅黑 16", height=2)
		self.l3.grid()
		self.var_input = tk.StringVar(value='请输入一段文本')  # 输入框默认值
		self.var_youdao = tk.StringVar()
		self.var_baidu = tk.StringVar()
		self.var_bing = tk.StringVar()
		self.var_360 = tk.StringVar()
		self.var_google = tk.StringVar()
		self.e1 = tk.Entry(self.window, textvariable=self.var_input, width=50, bg='#FCFCFC')
		self.e1.grid(row=0, column=1)
		self.e2 = tk.Entry(self.window, textvariable=self.var_youdao, width=50, bg='#FFD2D2')
		self.e2.grid(row=1, column=1)
		self.e3 = tk.Entry(self.window, textvariable=self.var_baidu, width=50, bg='#FFECF5')
		self.e3.grid(row=2, column=1)
		self.e3 = tk.Entry(self.window, textvariable=self.var_bing, width=50, bg='#FFE6FF')
		self.e3.grid(row=3, column=1)
		self.e3 = tk.Entry(self.window, textvariable=self.var_360, width=50, bg='#F1E1FF')
		self.e3.grid(row=4, column=1)
		self.e4 = tk.Entry(self.window, textvariable=self.var_google, width=50, bg='#DFFFDF')
		self.e4.grid(row=5, column=1)
		self.b1 = tk.Button(self.window, text="翻译", command=self.trans_all, width=10, font="微软雅黑 18",
		                    activebackground="red", )
		self.b1.place(x=100, y=260)
		self.b2 = tk.Button(self.window, text="退出", command=self.window.quit, width=10, font="微软雅黑 18")
		self.b2.place(x=280, y=260)
		self.window.mainloop()

	def trans_youdao(self):
		"""有道翻译"""
		content = self.e1.get()
		data = {
			"i": content,
			"from": "AUTO",
			"to": "AUTO",
			"smartresult": "dict",
			"client": "fanyideskweb",
			"doctype": "json",
			"version": "2.1",
			"keyfrom": "fanyi.web",
			"action": "FY_BY_REALTIME",
			"typoResult": "false"
		}
		response = requests.post("http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule",
		                         data=data).json()
		resp = response["translateResult"][0][0]["tgt"]
		print('有道翻译结果:{}'.format(resp))
		self.var_youdao.set(resp)

	def trans_baidu(self):
		"""百度翻译"""
		content = self.e1.get()
		bt = BaiduTranslator(toLang="en", text=content)
		resp = bt.translate()
		print('百度翻译结果:{}'.format(resp))
		self.var_baidu.set(resp)

	def trans_360(self):
		"""360翻译"""
		content = self.e1.get()
		if is_all_chinese(content):
			eng = 0
		else:
			eng = 1
		url = 'https://fanyi.so.com/index/search?eng={}&validate=&ignore_trans=0&query={}'.format(eng, content)
		headers = {
			# "cookie": "Q=u=fbybzfx&n=&le=p29fo19gp2fyAQNkAwZhL29g&m=ZGt2WGWOWGWOWGWOWGWOWGWOZGZl&qid=51678245&im=1_t01e65713e964f6c934&src=pcw_eyun&t=1; T=s=e3f53835f17dd55e4b4511508d05615e&t=1639266571&lm=0-1&lf=2&sk=cde45ff5905f7ba4b29924c0a5f8a52b&mt=1639266571&rc=&v=2.0&a=1; QiHooGUID=9A41C06C1F80E4EE010234B5D14B467C.1640573892775; Q_UDID=8802ce11-020e-5abb-061c-aaa9f20e1824; __guid=144965027.3838809587334749700.1640573886481.818; count=1; gtHuid=1; __huid=115iqIZOUAuXoKvm2qpzgyRlTD7qxJF6wMu50nS1pErmg=",
			"origin": "https://fanyi.so.com",
			"pro": "fanyi",
			# "referer": " https://fanyi.so.com/",
			"sec-fetch-dest": "empty",
			"sec-fetch-mode": "cors",
			"sec-fetch-site": "same-origin",
			"user-agent": "Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1"
		}
		r = requests.post(url=url, headers=headers)
		# print(r.status_code)
		result = r.json()['data']['fanyi']
		print('360翻译结果:{}'.format(result))
		self.var_360.set(result)

	def trans_google(self):
		"""谷歌翻译"""
		gg = GoogleTranslator()
		text = self.e1.get()
		if is_all_chinese(text):
			result = gg.translate_content_en(text=text)
		else:
			result = gg.translate_content_ch(text=text)
		print('谷歌翻译结果:{}'.format(result))
		self.var_google.set(result)

	def trans_bing(self):
		content = self.e1.get()
		if is_all_chinese(content):
			source = 'zh'
			target = 'en'
		else:
			source = 'en'
			target = 'zh'
		bing = Bing()
		result = bing.translate(source, target, content)
		print('必应翻译结果:{}'.format(result))
		self.var_bing.set(result)

	def trans_all(self):
		self.trans_youdao()
		self.trans_baidu()
		self.trans_bing()
		self.trans_360()
		self.trans_google()

定义了一个TransTool类,这个类的作用就是利用tkinter开发前台界面,并调用各个爬虫对象实现翻译功能。

其中:

__init__构造函数,实现tkinter界面和前台逻辑处理。

trans_youdao()函数,实现有道翻译的逻辑。

trans_baidu()函数,实现百度翻译的逻辑。

trans_360()函数,实现360翻译的逻辑。

trans_google()函数,实现谷歌翻译的逻辑。

trans_bing()函数,实现必应翻译的逻辑。

trans_all()函数,调用了以上所有函数,实现全部翻译。如果有个性化需求,关闭其中某个翻译工具,把对应的那行代码注释掉就可以了,比如:

def trans_all(self):
	self.trans_youdao()
	# self.trans_baidu() # 关闭百度翻译
	self.trans_bing()
	# self.trans_360() # 关闭360翻译
	self.trans_google()

这样,就只保留了有道翻译、必应翻译、谷歌翻译3种。

同时,别忘了,这个工具还支持中译英、英译中,双向翻译的哦!

三、同步讲解视频

详细讲解视频,请移步:

4分钟代码讲解,用Python开发聚合翻译神器!

四、获取python源码

爱学习的小伙伴,想获取完整python代码文件,移步vx微信公众号"老男孩的平凡之路",后台回复"聚合翻译",即可获取完整python源码文件!


我是马哥,全网累计粉丝上万,欢迎一起交流python技术。

各平台搜索“马哥python说”:知乎、哔哩哔哩、小红书、新浪微博。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马哥python说

打赏多少不重要,表达认可最重要

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值