#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat Mar 17 00:51:16 2018 @author: kindy python 调用baidu api实现简单翻译软件 前往http://api.fanyi.baidu.com/api/trans/product/index注册账号, 登录后台创建应用 """ import http.client as httplib from hashlib import md5 import urllib import random import json import sys import time from PyQt5 import QtCore, QtGui, uic from PyQt5.QtCore import QCoreApplication from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QMessageBox from PyQt5.QtWidgets import QFileDialog, QAction, qApp from PyQt5.QtGui import QIcon, QPixmap qtCreatorFile = "youdao.ui" # 使用uic加载 Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile) class MyApp(QMainWindow, Ui_MainWindow): def __init__(self): QMainWindow.__init__(self) Ui_MainWindow.__init__(self) super().__init__() self.initUI() # 调用自定义的UI初始化函数initUI() self.initBaiDu() def initBaiDu(self): self.appKey = '20180317000136787' # 就是应用ID self.secretKey = 'jkwmEFzkfdHdmMy3Q2RR' # 就是应用密钥 self.httpClient = None self.myurl = '/api/trans/vip/translate' self.salt = random.randint(1, 65536) # 随机数 def lang_transform(self, lang): ''' tranform the language into correct format that ai.youdao.com accepted 中文 zh-CHS 日文 ja 英文 EN 韩文 ko 法文 fr 俄文 ru 葡萄牙文 pt 西班牙文 es ''' if lang == "Chinese": return "zh" if lang == "Japanease": return "ja" if lang == "English": return "en" if lang == "Korea": return "kor" if lang == "Russia": return "ru" if lang == "French": return "fra" if lang == "Auto": return "auto" def initUI(self): ''' Initialize the window's UI ''' self.setupUi(self) self.setWindowTitle("Dict Translate") self.setWindowIcon(QIcon("translate.png")) # 设置图标,linux下只有任务栏会显示图标 self.initMenuBar() # 初始化菜单栏 self.initToolBar() # 初始化工具栏 self.initButton() # 初始化按钮 self.show() # 显示 def initMenuBar(self): ''' 初始化菜单栏 ''' menubar = self.menuBar() #self.actionExit.triggered.connect(qApp.quit) # 按下菜单栏的Exit按钮会退出程序 #self.actionExit.setStatusTip("退出程序") # 左下角状态提示 #self.actionExit.setShortcut('Ctrl+Q') # 添加快捷键 exitAct = QAction(QIcon('exit.png'), 'Exit', self) exitAct.setShortcut('Ctrl+Q') exitAct.triggered.connect(qApp.quit) fileMenu = menubar.addMenu('&File') fileMenu.addAction(exitAct) fileMenu = menubar.addMenu('&Help') def initToolBar(self): ''' 初始化工具栏 创建一个QAction实例exitAct,然后添加到designer已经创建的默认的工具栏toolBar里面 ''' exitAct = QAction(QIcon('exit.png'), 'Exit', self) exitAct.setShortcut('Ctrl+Q') exitAct.triggered.connect(qApp.quit) self.toolBar.addAction(exitAct) def initButton(self): ''' ''' self.btnClear.clicked.connect(self.clearButton_callback) # 按下按钮调用回调函数 self.btnClear.setToolTip("清除文本输入内容") # 设置提示 #self.btnBrowse.setStyleSheet("{border-image: url(/home/kindy/Files/python/gui/pyq/play.ico);}") # 此代码没有效果 self.btnExchange.clicked.connect(self.exchangeButton_callback) # 一旦按下按钮,连接槽函数进行处理 self.btnExchange.setToolTip("转换翻译语言") self.btnTranslate.clicked.connect(self.transButton_callback) self.btnTranslate.setToolTip("翻译内容") def clearButton_callback(self): self.transInput.clear() self.transInput.setFocus() def exchangeButton_callback(self): pass def transButton_callback(self, filename): ''' 调用有道词典API进行文字识别 ''' start = time.time() end = time.time() trans = self.get_translation( self.transInput.toPlainText()) # self.transOutput.setPlainText(self.transInput.toPlainText()+self.fromLang) self.transOutput.setPlainText(trans) self.transOutput.setStatusTip("翻译时间:%.2fs"%(end-start)) def get_translation(self, query): self.q = self.transInput.toPlainText() # 获取控件内容,得到询的内容 self.toLang = self.lang_transform(self.transTo.currentText() ) # 目标语言 self.fromLang = self.lang_transform (self.transFrom.currentText()) # 源语言 sign = self.appKey + query + str(self.salt) + self.secretKey # 签名 m1 = md5() m1.update( sign.encode() ) sign = m1.hexdigest() # 计算签名的哈希值 # self.myurl = self.myurl+'?appKey=' + self.appKey + '&q='+ urllib.parse.quote(query) + '&from='+self.fromLang+'&to='+self.toLang+'&salt='+str(self.salt)+'&sign='+sign self.myurl = self.myurl+'?appid='+self.appKey+'&q='+urllib.parse.quote(query)+'&from='+self.fromLang+'&to='+self.toLang+'&salt='+str(self.salt)+'&sign='+sign try: httpClient = httplib.HTTPConnection('api.fanyi.baidu.com') httpClient.request('GET', self.myurl) #response是HTTPResponse对象 response = httpClient.getresponse() res = response.read().decode('unicode-escape') hjson = json.loads(res) # exp = str(hjson['trans_result'][0]["dst"]) # exp = exp[0] # exp = exp.replace(',','\r\n') # exp = exp.replace('[',' ') # exp = exp.replace(']',' ') # exp = exp.replace('\'',' ') return exp except Exception as e: print (e) finally: if httpClient: httpClient.close() if __name__ == "__main__": app = QApplication(sys.argv) window = MyApp() sys.exit(app.exec_())