[Caso de desenvolvimento de GUI do Python] Use o tkinter do Python para desenvolver um artefato de tradução agregado

contente

1. Demonstração do efeito

2. Decomposição do código

3. Obtenha o código-fonte do python


1. Demonstração do efeito

Usei a biblioteca tkinter do python para desenvolver um tradutor agregado para obter os resultados de 5 ferramentas de tradução ao mesmo tempo com um clique, incluindo:

Tradução Youdao, tradução Baidu, tradução Bing, tradução 360, tradução Google.

Primeiro, dê uma olhada na demonstração:

Eu usei a biblioteca tkinter do python para desenvolver um artefato de tradução agregado!

O código principal dessa ferramenta de tradução agregada é a tradução implementada pelo rastreador da web python e pela API do site de tradução.

2. Decomposição do código

Primeiro, importe as bibliotecas necessárias:

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

Como quero que essa ferramenta suporte a tradução bidirecional entre chinês e inglês, defino uma função para determinar se a entrada é chinesa ou inglesa:

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

Essa função não é muito rigorosa e determina apenas se o primeiro caractere do conteúdo de entrada é chinês ou inglês, o que resultará em uma falha de julgamento se a entrada for chinesa e inglesa. Melhorias subsequentes são necessárias para julgar todo o conteúdo de entrada.

Então, o seguinte é o rastreador da web e o rastreamento da API para cada site de tradução, por sua vez, para realizar a função de tradução, e o código-fonte do Python não será postado aqui.

Em seguida, concentre-se em explicar a interface de front-end da GUI implementada com o tkinter.

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()

Uma classe TransTool é definida.A função desta classe é usar tkinter para desenvolver a interface front-end e chamar cada objeto crawler para implementar a função de tradução.

dentro:

O construtor __init__ implementa a interface tkinter e o processamento de lógica de primeiro plano.

A função trans_youdao() implementa a lógica da tradução Youdao.

A função trans_baidu() implementa a lógica da tradução do Baidu.

A função trans_360() implementa a lógica da tradução 360.

A função trans_google() implementa a lógica do Google Translate.

A função trans_bing() implementa a lógica da tradução do Bing.

A função trans_all() chama todas as funções acima para implementar todas as traduções. Se você tiver requisitos individuais, feche uma das ferramentas de tradução e comente a linha de código correspondente, por exemplo:

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

Dessa forma, apenas três tipos de tradução do Youdao, tradução do Bing e tradução do Google são mantidos.

Ao mesmo tempo, não se esqueça, esta ferramenta também suporta tradução chinês-inglês, inglês-chinês e bidirecional!

3. Vídeo explicativo sincronizado

Para uma explicação detalhada do vídeo, acesse:

Explicação de código de 4 minutos, use Python para desenvolver um artefato de tradução agregado!

Quarto, obtenha o código-fonte do python

Amigos que gostam de aprender, querem obter o arquivo de código python completo, mova para a conta pública do vx WeChat " Old Boy's Ordinary Road ", responda " tradução agregada " em segundo plano, você pode obter o arquivo de código fonte python completo!


Eu sou Ma Ge e tenho dezenas de milhares de fãs em toda a rede. Bem-vindo a trocar a tecnologia python juntos.

Pesquise " Ma Ge python disse " em várias plataformas: Zhihu, Bilibili, Xiaohongshu, Sina Weibo.

Acho que você gosta

Origin blog.csdn.net/solo_msk/article/details/124227586
Recomendado
Clasificación