[Cas de développement de l'interface graphique Python] Utilisez le tkinter de Python pour développer un artefact de traduction agrégé

teneur

1. Démonstration d'effet

2. Décomposition du code

3. Obtenez le code source Python


1. Démonstration d'effet

J'ai utilisé la bibliothèque tkinter de python pour développer un traducteur agrégé permettant d'obtenir les résultats de 5 outils de traduction en même temps en un seul clic, dont :

Traduction Youdao, traduction Baidu, traduction Bing, traduction 360, traduction Google.

Tout d'abord, jetez un œil à la démo :

J'ai utilisé la bibliothèque tkinter de python pour développer un artefact de traduction agrégée !

Le code de base de cet outil de traduction agrégé est la traduction mise en œuvre par le robot d'indexation python et l'API du site Web de traduction.

2. Décomposition du code

Tout d'abord, importez les bibliothèques requises :

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

Puisque je veux que cet outil prenne en charge la traduction bidirectionnelle entre le chinois et l'anglais, je définis une fonction pour déterminer si l'entrée est en chinois ou en anglais :

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

Cette fonction n'est pas très rigoureuse et détermine uniquement si le premier caractère du contenu d'entrée est chinois ou anglais, ce qui entraînera un échec de jugement si l'entrée est à la fois en chinois et en anglais. Des améliorations ultérieures sont nécessaires pour évaluer tout le contenu d'entrée à la place.

Ensuite, ce qui suit est le robot d'exploration Web et l'API qui explorent tour à tour chaque site Web de traduction pour réaliser la fonction de traduction, et le code source Python ne sera pas publié ici.

Ensuite, concentrez-vous sur l'explication de l'interface graphique frontale implémentée avec 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()

Une classe TransTool est définie. La fonction de cette classe est d'utiliser tkinter pour développer l'interface frontale et d'appeler chaque objet crawler pour implémenter la fonction de traduction.

dans:

Le constructeur __init__ implémente l'interface tkinter et le traitement logique de premier plan.

La fonction trans_youdao() implémente la logique de traduction Youdao.

La fonction trans_baidu() implémente la logique de traduction Baidu.

La fonction trans_360() implémente la logique de la traduction 360.

La fonction trans_google() implémente la logique de Google Traduction.

La fonction trans_bing() implémente la logique de traduction Bing.

La fonction trans_all() appelle toutes les fonctions ci-dessus pour implémenter toutes les traductions. Si vous avez des besoins particuliers, fermez l'un des outils de traduction et commentez la ligne de code correspondante, par exemple :

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

De cette manière, seuls trois types de traduction Youdao, traduction Bing et traduction Google sont conservés.

En même temps, n'oubliez pas que cet outil prend également en charge la traduction chinois-anglais, anglais-chinois et bidirectionnelle !

3. Vidéo d'explication synchronisée

Pour une explication détaillée de la vidéo, rendez-vous sur :

Explication de code en 4 minutes, utilisez Python pour développer un artefact de traduction agrégé !

Quatrièmement, récupérez le code source python

Amis qui aiment apprendre, veulent obtenir le fichier de code python complet, passez au compte public vx WeChat " Old Boy's Ordinary Road ", répondez " traduction agrégée " en arrière-plan, vous pouvez obtenir le fichier de code source python complet !


Je suis Ma Ge et j'ai des dizaines de milliers de fans sur l'ensemble du réseau. Bienvenue pour échanger ensemble la technologie python.

Recherchez « Ma Ge python a dit » sur différentes plateformes : Zhihu, Bilibili, Xiaohongshu, Sina Weibo.

Je suppose que tu aimes

Origine blog.csdn.net/solo_msk/article/details/124227586
conseillé
Classement