截图一张
界面没有怎么设计,毕竟也不是卖钱,差不多就行。
下面是代码
YoudaoTranslate.py
import hashlib
import random
import time
import tkinter
import requests
def exp(translate_text):
url = 'https://aidemo.youdao.com/trans'
if not translate_text:
return
if len(translate_text) > 1000:
print('体验翻译上限1000字符')
return
data = {
'q': translate_text,
'from': 'Auto',
'to': 'Auto'
}
headers = {
"Accept ": "application/json, text/javascript, */*; q=0.01",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Origin": r"https://ai.youdao.com",
"Referer": "https://ai.youdao.com/product-fanyi.s",
"Sec-Fetch-Mode": "cors",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
}
result = requests.post(url, data=data, headers=headers).json()
for item in result['translation']:
print(item)
def web(translate_text):
app_version = '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
r = str(int(time.time() * 1000))
i = r + str(random.randint(0, 10))
t = hashlib.md5(app_version.encode(encoding='utf-8')).hexdigest()
sign_str = ("fanyideskweb" + str(translate_text) + str(i) + "n%A-rKaT5fb[Gy?;N5@Tj").encode(encoding='utf-8')
sign = hashlib.md5(sign_str).hexdigest()
data = {
'i': translate_text,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': i,
'sign': sign,
'ts': r,
'bv': t,
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Host': 'fanyi.youdao.com',
"Cookie": "OUTFOX_SEARCH_USER_ID=864762568@182.48.107.243; ___rl__test__cookies=%s; OUTFOX_SEARCH_USER_ID_NCOO=%s" % (
r, 2147483647 * random.random()),
'Origin': 'http://fanyi.youdao.com',
'Referer': 'http://fanyi.youdao.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
result = requests.post(url, headers=headers, data=data).json()
if result['errorCode'] == 0:
return result
else:
return None
def fanyi():
global text
result = web(text.get(0.0, tkinter.END))
if result:
text.delete(0.0, tkinter.END)
i = 0
for item in result['translateResult']:
if i > 0:
text.insert(tkinter.INSERT, '\n')
text.insert(tkinter.INSERT, item[0]['tgt'])
i += 1
def configwindow():
global text
# 创建主窗口
window = tkinter.Tk()
# 设置标题
window.title('Titanjun')
# 设置窗口大小
window.geometry('600x400')
button2 = tkinter.Button(window, text='翻译', width=15, height=2, fg='#fff', bg='#e02433', borderwidth=0,
activebackground='#bf0917', activeforeground='#fff', font=('Microsoft YaHei', 12),
cursor='hand2')
button2.bind("<Button-1>", fanyi)
button2.pack()
text = tkinter.Text(window, fg="#333", background='#f2f2f2', font=('Microsoft YaHei', 18))
# 添加右侧滚动条
scroll = tkinter.Scrollbar()
# side放到窗体的那一侧 fill填充
scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)
text.pack(side=tkinter.RIGHT, fill=tkinter.Y)
# 两者关联
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)
text.pack(fill='both')
# 进入消息循环
window.mainloop()
# query = input('请输入要翻译的文本:')
# print(web(query))
# if __name__ == '__main__':
# configwindow()
有道翻译GUI.py
# -*- coding: utf-8 -*-
import os
import sys
from YouDaoTranslate import web
if hasattr(sys, 'frozen'):
os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
from PyQt5 import QtCore, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(783, 595)
# 禁止最大化按钮
MainWindow.setWindowFlags(QtCore.Qt.WindowFullscreenButtonHint)
# 禁止拉伸窗口大小
MainWindow.setFixedSize(MainWindow.width(), MainWindow.height())
MainWindow.setStyleSheet("button:hover{\n"
" background-color:#bf0917\n"
"}")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(300, 10, 111, 41))
self.pushButton.setStyleSheet("QPushButton{\n"
" margin-left: 16px;\n"
" text-align: center;\n"
" width: 108px;\n"
" height: 38px;\n"
" line-height: 38px;\n"
" background: #e02433;\n"
" border-radius: 3px;\n"
" font-size: 14px;\n"
" color: #fff;\n"
"}\n"
"QPushButton:hover{"
" cursor:pointer;\n"
" background-color:#bf0917\n"
"}")
self.pushButton.setObjectName("pushButton")
self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(0, 60, 791, 531))
self.textEdit.setStyleSheet("QTextEdit{\n"
" color:#333;\n"
" font-size: 24px;\n"
" line-height: 30px;\n"
" height: 420px;\n"
" background: #fff;\n"
" border-radius: 6px;\n"
" margin-right: 10px;\n"
" padding: 18px 50px 18px 18px;\n"
"}\n"
"QTextEdit:hover{\n"
" border: 1px solid #0e7dff\n"
"}")
self.textEdit.setObjectName("textEdit")
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
self.retranslateUi(MainWindow)
self.pushButton.clicked.connect(self.web2)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def web2(self):
result = web(self.textEdit.toPlainText())
if result:
self.textEdit.clear()
content = []
for item in result['translateResult']:
content.append(item[0]['tgt'])
self.textEdit.setPlainText("\n".join(content))
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "翻译"))
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
widget = QtWidgets.QWidget()
ui = Ui_MainWindow()
ui.setupUi(widget)
widget.show()
sys.exit(app.exec_())
使用PyInstaller打包成exe
pyinstaller -F -W -n 有道翻译 -i C:\Users\mbh\Downloads\20190904022008140_easyicon_net_256.ico F_copy2.py -p YouDaoTranslate.py -p "D:\Program Files(x86)\Python\Python37-32\Lib\site-packages"