import sys
from PyQt5.QtWidgets import QApplication
from PyQt5 import QtWidgets, QtCore, QtGui#绘制界面用到的模块
from PyQt5.QtCore import Qt, QFile
from faker import Faker#爬取有道翻译用到的模块
import time
import random
import hashlib
import requests
from PyQt5.QtWidgets import QFileDialog, QDesktopWidget, QMainWindow # 调用系统文本选择框用到的模块
import docx as docx#读取docx文档用到的模块
import pyperclip#读取pdf文件用到的模块
import pdfplumber as pdfplumber
from win32com import client#将docx文件转化为pdf文件,doc文件转化为docx文件用到的模块
import os#有关路径问题的模块
from aip import AipOcr#调用百度文字识别用到的模块
from PyQt5.QtGui import QIcon#设置图标用到的模块
import execjs#运行js文件的模块
from PyQt5.QtWidgets import QWidget#绘制悬浮窗用到的模块
from PyQt5.QtGui import QCursor, QMouseEvent#设置鼠标的形状,重写移动事件用到的模块
from PyQt5.QtCore import QPoint, QPropertyAnimation, QRect#设置动画用到的模块
# import keyboard
# from translation import Ui_MainWindow
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1400, 1000)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setGeometry(QtCore.QRect(10, 10, 1371, 941))
self.widget.setObjectName("widget")
self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.widget)
self.verticalLayout_5.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_5.setObjectName("verticalLayout_5")
self.verticalLayout_4 = QtWidgets.QVBoxLayout()
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.select_ = QtWidgets.QComboBox(self.widget)
font = QtGui.QFont()
font.setPointSize(12)
self.select_.setFont(font)
self.select_.setObjectName("select_")
self.select_.addItem("")
self.select_.addItem("")
self.verticalLayout_2.addWidget(self.select_)
self.select = QtWidgets.QComboBox(self.widget)
font = QtGui.QFont()
font.setPointSize(12)
self.select.setFont(font)
self.select.setObjectName("select")
self.select.addItem("")
self.select.addItem("")
self.verticalLayout_2.addWidget(self.select)
self.verticalLayout_4.addLayout(self.verticalLayout_2)
self.verticalLayout_3 = QtWidgets.QVBoxLayout()
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.language = QtWidgets.QComboBox(self.widget)
font = QtGui.QFont()
font.setPointSize(12)
self.language.setFont(font)
self.language.setObjectName("language")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.language.addItem("")
self.verticalLayout_3.addWidget(self.language)
self.language_ = QtWidgets.QComboBox(self.widget)
font = QtGui.QFont()
font.setPointSize(12)
self.language_.setFont(font)
self.language_.setObjectName("language_")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.language_.addItem("")
self.verticalLayout_3.addWidget(self.language_)
self.verticalLayout_4.addLayout(self.verticalLayout_3)
self.verticalLayout_5.addLayout(self.verticalLayout_4)
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.translation = QtWidgets.QTextEdit(self.widget)
font = QtGui.QFont()
font.setPointSize(16)
self.translation.setFont(font)
self.translation.setObjectName("translation")
self.horizontalLayout_3.addWidget(self.translation)
self.translationresult = QtWidgets.QTextBrowser(self.widget)
font = QtGui.QFont()
font.setPointSize(16)
self.translationresult.setFont(font)
self.translationresult.setObjectName("translationresult")
self.horizontalLayout_3.addWidget(self.translationresult)
self.verticalLayout_5.addLayout(self.horizontalLayout_3)
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.translate = QtWidgets.QPushButton(self.widget)
font = QtGui.QFont()
font.setPointSize(16)
self.translate.setFont(font)
self.translate.setObjectName("translate")
self.horizontalLayout_2.addWidget(self.translate)
self.clear = QtWidgets.QPushButton(self.widget)
font = QtGui.QFont()
font.setPointSize(16)
self.clear.setFont(font)
self.clear.setObjectName("clear")
self.horizontalLayout_2.addWidget(self.clear)
self.verticalLayout.addLayout(self.horizontalLayout_2)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.copy = QtWidgets.QPushButton(self.widget)
font = QtGui.QFont()
font.setPointSize(16)
self.copy.setFont(font)
self.copy.setObjectName("copy")
self.horizontalLayout.addWidget(self.copy)
self.paste = QtWidgets.QPushButton(self.widget)
font = QtGui.QFont()
font.setPointSize(16)
self.paste.setFont(font)
self.paste.setObjectName("paste")
self.horizontalLayout.addWidget(self.paste)
self.signup = QtWidgets.QPushButton(self.widget)
font = QtGui.QFont()
font.setPointSize(16)
self.signup.setFont(font)
self.signup.setObjectName("signup")
self.horizontalLayout.addWidget(self.signup)
self.verticalLayout.addLayout(self.horizontalLayout)
self.verticalLayout_5.addLayout(self.verticalLayout)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1400, 26))
self.menubar.setObjectName("menubar")
self.menu = QtWidgets.QMenu(self.menubar)
self.menu.setObjectName("menu")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.a_open_file = QtWidgets.QAction(MainWindow)
self.a_open_file.setObjectName("a_open_file")
self.a_save_file = QtWidgets.QAction(MainWindow)
self.a_save_file.setObjectName("a_save_file")
self.a_about_ = QtWidgets.QAction(MainWindow)
self.a_about_.setObjectName("a_about_")
self.menu.addAction(self.a_open_file)
self.menu.addAction(self.a_save_file)
self.menu.addAction(self.a_about_)
self.menubar.addAction(self.menu.menuAction())
self.retranslateUi(MainWindow)
self.a_open_file.triggered.connect(self.open_file)
self.a_save_file.triggered.connect(self.save_file)
self.a_about_.triggered.connect(self.about_)
self.translate.clicked.connect(self.fanyi)
self.clear.clicked.connect(self.translationresult.clear)
self.clear.clicked.connect(self.translation.clear)
self.paste.clicked.connect(self.translation.paste)
self.copy.clicked.connect(self.copy_)
self.signup.clicked.connect(MainWindow.close)
self.translation.textChanged.connect(self.read_)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
MainWindow.setWindowIcon(QIcon('./tubiao.ico'))#设置图标
self.translation.setStyleSheet("border-image:url(./background1.jpg);color:white")#设置文本框的背景图片和文字颜色
self.translationresult.setStyleSheet("border-image:url(./background.jpg);color:white")
# MainWindow.setStyleSheet("#MainWindow{border-image:url(./background.jpg);}")#设置窗体的背景图片(自适应)
# MainWindow.setStyleSheet("#MainWindow{background-image: url(./background.jpg);}")#设置窗体的背景图片
# self.translate.setStyleSheet("QPushButton{border-image: url(./background.jpg)}")#设置按钮的背景图片
# MainWindow.setWindowOpacity(0.5)#设置窗口透明度
# MainWindow.setAttribute(QtCore.Qt.WA_TranslucentBackground)#设置窗口背景透明
# op = QtWidgets.QGraphicsOpacityEffect()#设置控件的透明度,透明度的值,0.0到1.0,最小值0是透明,1是不透明
# op.setOpacity(0.5)
# self.translate.setGraphicsEffect(op)
# self.translate.setAutoFillBackground(True)
MainWindow.setWindowFlags(Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint | Qt.MSWindowsFixedSizeDialogHint)#设置窗体只有最小化和关闭按钮,固定窗体的大小
MainWindow.setStyleSheet("#MainWindow{background-color:black}")#设置窗体的背景颜色
self.language.setStyleSheet('background:black;color:white;')#设置控件的背景颜色和字体颜色
self.language_.setStyleSheet('background:black;color:white;')
self.select.setStyleSheet('background:black;color:white;')
self.select_.setStyleSheet('background:black;color:white;')
self.translate.setStyleSheet("QPushButton{background:black;color:white;border-radius:5px;}QPushButton:hover{background:white;color:gray;}")#设置控件的背景颜色和字体大小,以及复合事件
self.clear.setStyleSheet("QPushButton{background:black;color:white;border-radius:5px;}QPushButton:hover{background:white;color:gray;}")
self.copy.setStyleSheet("QPushButton{background:black;color:white;border-radius:5px;}QPushButton:hover{background:white;color:gray;}")
self.paste.setStyleSheet("QPushButton{background:black;color:white;border-radius:5px;}QPushButton:hover{background:white;color:gray;}")
self.signup.setStyleSheet("QPushButton{background:black;color:white;border-radius:5px;}QPushButton:hover{background:white;color:gray;}")
# MainWindow.setGeometry(200, 200, 1400, 1000)
# # 获取屏幕坐标系
# screen = QDesktopWidget().screenGeometry() # 得到屏幕的坐标系
# # 获取窗口坐标系
# size = MainWindow.geometry()
# newLeft = (screen.width() - size.width()) / 2 # 计算
# newTop = (screen.height() - size.height()) / 2
#
# MainWindow.move(int(newLeft), int(newTop)-42)
# 输出内容到textbrowser上
def printf(self, str):
self.translationresult.append(str)#在指定的区域显示提示信息
self.cursor = self.translationresult.textCursor()
self.translationresult.moveCursor(self.cursor.End)#光标移到最后,这样就会自动显示出来
QtWidgets.QApplication.processEvents()#一定加上这个功能,不然有卡顿
# 将内容复制到系统的剪切板上
def copy_(self):
pyperclip.copy(self.translationresult.toPlainText())
# 读取拖拽文件
def read_(self):
if self.translation.toPlainText().find('file:///') == 0:
self.translation.setText(self.translation.toPlainText().replace('file:///', ''))
flag = os.path.splitext(self.translation.toPlainText())[1]#获取路径中的文件类型
if flag == '.jpg' or flag == '.png':
if self.select.currentText() == '图片翻译':
imgs = self.translation.toPlainText()
global imgdict#定义全局变量
global imgpath
imgdict[imgpath] = imgs
self.translation.setText('')
self.translation.append('')#将图片显示到textedit上
self.fanyi()
# jpg = QtGui.QPixmap(imgs).scaled(self.label.width(), self.label.height())#将图片显示到标签上(自适应)
# self.label.setPixmap(jpg)
else:
self.translation.setText("读取的文件类型与翻译的文件类型不一致!")
elif flag == '.txt':
if self.select.currentText() == '文字翻译':
txtbefore = self.translation.toPlainText()
self.translation.setText('')
f1 = QFile(txtbefore)#创建文件对象,不创建文件对象也不报错 也可以读文件和写文件
f2 = open(str(txtbefore), "r", encoding='UTF-8')#打开路径所对应的文件, "r"以只读的方式 也是默认的方式
txtafter = f2.read()#获取读取docx文件的内容
self.translation.setText(txtafter)
f2.close()
self.fanyi()
else:
self.translation.setText("读取的文件类型与翻译的文件类型不一致!")
elif flag == '.docx':
if self.select.currentText() == '文字翻译':
docxbefore = self.translation.toPlainText()
self.translation.setText('')
docxafter = docx.Document(str(docxbefore))#定义对象
for i in range(len(docxafter.paragraphs)):#将docx文件中的内容输出到textedit上
self.translation.append(docxafter.paragraphs[i].text)
self.fanyi()
else:
self.translation.setText("读取的文件类型与翻译的文件类型不一致!")
elif flag == '.doc':
if self.select.currentText() == '文字翻译':
wordss = client.Dispatch("Word.Application")
docbefore = self.translation.toPlainText()
self.translation.setText('')
docs = wordss.Documents.Open(docbefore)
zhuanhua = os.path.splitext(docbefore)[0] + str(random.randint(1, 248)) + '.docx'
docs.SaveAs(zhuanhua, 16)#使用参数16表示将doc转换成docx
docs.Close()
wordss.Quit()
file2 = docx.Document(zhuanhua)
for i in range(len(file2.paragraphs)):
self.translation.append(file2.paragraphs[i].text)
os.remove(zhuanhua)#删除转化后的docx文件
self.fanyi()
else:
self.translation.setText("读取的文件类型与翻译的文件类型不一致!")
elif flag == '.pdf':
if self.select.currentText() == '文字翻译':
pdfbefore = self.translation.toPlainText()
self.translation.setText('')
pdfafter = pdfplumber.open(pdfbefore)#打开
page = pdfafter.pages#获取pdf文件中所有页的内容
for i in page:#将pdf文件中所有页内容输出到textedit
self.translation.append(i.extract_text())
self.fanyi()
else:
self.translation.setText("读取的文件类型与翻译的文件类型不一致!")
else:
self.translation.setText("暂不提供读取此类型的文件!")
else:
pass
# 读取各种文件
def open_file(self):
self.translation.setText('')
fileName, fileType = QFileDialog.getOpenFileName(self, "读取文件", "./","读取的文件类型(*.txt);;读取的文件类型(*.docx);;读取的文件类型(*.doc);;读取的文件类型(*.pdf);;读取的文件类型(*.jpg);;读取的文件类型(*.png)")#文件选择框
if fileName:
flag2 = os.path.splitext(fileName)[1]
if flag2 == '.txt':
if self.select.currentText() == '文字翻译':
txts = fileName
f3 = QFile(txts)
f4 = open(txts, "r", encoding='UTF-8')
data = f4.read()
self.translation.setText(data)
f4.close()
self.fanyi()
else:
self.translation.setText("读取的文件类型与翻译的文件类型不一致!")
elif flag2 == '.docx':
if self.select.currentText() == '文字翻译':
docxs = fileName
file = docx.Document(str(docxs))
for i in range(len(file.paragraphs)):
self.translation.append(file.paragraphs[i].text)
self.fanyi()
else:
self.translation.setText("读取的文件类型与翻译的文件类型不一致!")
elif flag2 == '.doc':
if self.select.currentText() == '文字翻译':
words = client.Dispatch("Word.Application")
doc = words.Documents.Open(fileName)
zhuanhua1 = os.path.splitext(fileName)[0] + str(random.randint(1, 248)) + '.docx'
doc.SaveAs(zhuanhua1, 16)
doc.Close()
words.Quit()
file1 = docx.Document(zhuanhua1)
for i in range(len(file1.paragraphs)):
self.translation.append(file1.paragraphs[i].text)
self.fanyi()
os.remove(zhuanhua1)
else:
self.translation.setText("读取的文件类型与翻译的文件类型不一致!")
elif flag2 == '.pdf':
if self.select.currentText() == '文字翻译':
pdfs = pdfplumber.open(fileName)
pages = pdfs.pages
for i in pages:
self.translation.append(i.extract_text())
self.fanyi()
else:
self.translation.setText("读取的文件类型与翻译的文件类型不一致!")
elif flag2 == '.jpg' or flag2 == '.png':
if self.select.currentText() == '图片翻译':
global imgdict
global imgpath
imgdict[imgpath] = fileName
self.translation.setText('')
self.fanyi()
else:
self.translation.setText("读取的文件类型与翻译的文件类型不一致!")
else:
self.translation.setText("暂不支持读取此类型文件!")
# 保存各种文件
def save_file(self):
fileName1, fileType1 = QFileDialog.getSaveFileName(self, "保存文件", "./","保存的文件类型(*.txt);;保存的文件类型(*.docx);;保存的文件类型(*.pdf)")
if fileName1:
flag1 = os.path.splitext(fileName1)[1]
if flag1 == '.txt':
f5 = open(str(fileName1), "a+", encoding='UTF-8')
f5.write(self.translation.toPlainText() + '\n' + self.translationresult.toPlainText())
f5.close()
elif flag1 == '.docx':
docx1 = docx.Document()
docx1.add_paragraph(self.translation.toPlainText() + '\n' + self.translationresult.toPlainText())#增加一个paragraph
docx1.save(fileName1)
elif flag1 == '.pdf':
if os.path.exists(fileName1):
os.remove(fileName1)
docx2 = docx.Document()
docx2.add_paragraph(self.translation.toPlainText() + '\n' + self.translationresult.toPlainText())
zhuanhua2 = os.path.splitext(fileName1)[0] + str(random.randint(1, 248)) + '.docx'
docx2.save(zhuanhua2)
wordsss = client.DispatchEx("Word.Application")#将生成的docx文件转化为pdf文件
worddoc = wordsss.Documents.Open(zhuanhua2, ReadOnly=1)
worddoc.SaveAs(fileName1, FileFormat=17)
worddoc.Close()
os.remove(zhuanhua2)
else:
self.translation.setText("暂不支持保存此类型文件!")
# 读取软件说明
def about_(self):
self.translation.setText('')
f6 = QFile('./说明.txt')
f7 = open('./说明.txt', "r", encoding='UTF-8')
data1 = f7.read()
self.translation.setText(data1)
f7.close()
def fanyi(self):
start = time.time()#记录开始翻译时的时间
global imgdict
global imgpath
if self.select.currentText() == '图片翻译':
if imgdict[imgpath] != 0:
self.translation.setText('')
appId, apiKey, secretKey = ['24934744', '2X0jHwt9xQTPdDSK98UDSmuK', 'PEGjDcvsg9hmZrWyvI7oTrerHmB4lCeg']#此处填入在百度云控制台处获得的appId, apiKey, secretKey的实际值
ocr = AipOcr(appId, apiKey, secretKey)#创建ocr对象
imgs_ = open(imgdict[imgpath], 'rb')
imgs_word = imgs_.read()
res = ocr.basicGeneral(imgs_word)
imgdict[imgpath] = 0
for j in range(len(res['words_result'])):#输出识别图片后的内容
self.translation.append(res['words_result'][j]['words'])
else:
self.translation.setText("检测到没有导入图片,请导入图片后再进行翻译!")
content = self.translation.toPlainText()
if content != '' and content != "检测到没有导入图片,请导入图片后再进行翻译!" and content != "输入的相应内容为空,请输入翻译内容!":
if len(content) > 5000:
self.translation.setText("")
self.translation.setText("翻译内容超过5000字,请减少翻译内容!")
elif self.select_.currentText() == '有道翻译':#实现爬取有道翻译
self.translationresult.setText("")
languagedict = {
'自动检测语言(有道翻译)': ['AUTO', 'AUTO'],
'中文-->英语': ['zh-CHS', 'en'],
'英语-->中文': ['en', 'zh-CHS'],
'中文-->日语': ['zh-CHS', 'ja'],
'日语-->中文': ['ja', 'zh-CHS'],
'中文-->韩语': ['zh-CHS', 'ko'],
'韩语-->中文': ['ko', 'zh-CHS'],
'中文-->法语': ['zh-CHS', 'fr'],
'法语-->中文': ['fr', 'zh-CHS'],
'中文-->德语': ['zh-CHS', 'de'],
'德语-->中文': ['de', 'zh-CHS'],
'中文-->俄语': ['zh-CHS', 'ru'],
'俄语-->中文': ['ru', 'zh-CHS'],
'中文-->西班牙语': ['zh-CHS', 'es'],
'西班牙语-->中文': ['es', 'zh-CHS'],
'中文-->葡萄牙语': ['zh-CHS', 'pt'],
'葡萄牙语-->中文': ['pt', 'zh-CHS'],
'中文-->意大利语': ['zh-CHS', 'it'],
'意大利语-->中文': ['it', 'zh-CHS'],
'中文-->越南语': ['zh-CHS', 'vi'],
'越南语-->中文': ['vi', 'zh-CHS'],
'中文-->印尼语': ['zh-CHS', 'id'],
'印尼语-->中文': ['id', 'zh-CHS'],
'中文-->阿拉伯语': ['zh-CHS', 'ar'],
'阿拉伯语-->中文': ['ar', 'zh-CHS'],
'中文-->荷兰语': ['zh-CHS', 'nl'],
'荷兰语-->中文': ['nl', 'zh-CHS'],
'中文-->泰语': ['zh-CHS', 'th'],
'泰语-->中文': ['th', 'zh-CHS']
}
language = self.language.currentText()#获得当前内容
url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
ua = Faker().user_agent()
headers = {
'User-Agent': ua,
'Host': 'fanyi.youdao.com',
'Origin': 'http://fanyi.youdao.com',
'Referer': 'http://fanyi.youdao.com/',
'Cookie': 'YOUDAO_MOBILE_ACCESS_TYPE=1; OUTFOX_SEARCH_USER_ID=685199569@10.108.160.102; JSESSIONID=aaaxE_dUg26X_bLyaCxWx; ___rl__test__cookies=' + str(time.time() * 1000) + '; OUTFOX_SEARCH_USER_ID_NCOO=836327382.8014793'
}
ts = str(time.time() * 1000)#生成相关的三个参数
salt = ts + str(random.randint(0, 10))
the_str = "fanyideskweb" + content + salt + "Y2FYu%TNSbMCxc3t2u^XT"
md5 = hashlib.md5()
md5.update(the_str.encode('utf-8'))
sign = md5.hexdigest()
data = {
'i': content,
'from': languagedict[language][0],
'to': languagedict[language][1],
'smartresult': "dict",
'client': "fanyideskweb",
'salt': salt,
'sign': sign,
'lts': ts,
'bv': "e2a78ed30c66e16a857c5b6486a1d326",
'doctype': "json",
'version': "2.1",
'keyfrom': "fanyi.web",
'action': "FY_BY_REALTlME",
}
response = requests.post(url, headers=headers, data=data).json()
if 'smartResult' in response.keys():#单词的翻译
for i in range(len(response['smartResult']['entries']) - 1):
self.printf(str(i + 1))
self.printf(response['smartResult']['entries'][i + 1])
self.printf("")
end1 = time.time()
self.printf("此次翻译所花费的时间为:" + str(int(end1 - start)) + "s")
else:
for j in range(len(response['translateResult'])):#句子、段落的翻译
result = ''
for k in range(len(response['translateResult'][j])):
result += response['translateResult'][j][k]['tgt']
self.printf(result)
self.printf("")
end2 = time.time()#记录翻译结束的时间
self.printf("此次翻译所花费的时间为:" + str(int(end2 - start)) + "s")
elif self.select_.currentText() == '百度翻译':#实现破解百度翻译
self.translationresult.setText("")
if len(content) < 10 and (self.language_.currentText() == '中文-->英语(百度翻译)' or self.language_.currentText() == '英语-->中文'):
url2 = "https://fanyi.baidu.com/sug"
data1 = {'kw': content}
response2 = requests.post(url2, data=data1).json()
for a in range(len(response2['data'])):#单词翻译
self.printf(str(a + 1))
self.printf(response2['data'][a]['v'] + response2['data'][a]['k'])
self.printf("")
end3 = time.time()
self.printf("此次翻译所花费的时间为:" + str(int(end3 - start)) + "s")
else:
languagedict_ = {
'中文-->英语(百度翻译)': ['zh', 'en'],
'英语-->中文': ['en', 'zh'],
'中文-->粤语': ['zh', 'yue'],
'粤语-->中文': ['yue', 'zh'],
'中文-->文言文': ['zh', 'wyw'],
'文言文-->中文': ['wyw', 'zh'],
'中文-->中文繁体': ['zh', 'cht'],
'中文繁体-->中文': ['cht', 'zh'],
'中文-->韩语': ['zh', 'kor'],
'中文-->法语': ['zh', 'fra'],
'中文-->德语': ['zh', 'de'],
'中文-->俄语': ['zh', 'ru'],
'中文-->西班牙语': ['zh', 'spa'],
'中文-->葡萄牙语': ['zh', 'pt'],
'中文-->意大利语': ['zh', 'it'],
'中文-->越南语': ['zh', 'vie'],
'中文-->印尼语': ['zh', 'id'],
'中文-->阿拉伯语': ['zh', 'ara'],
'中文-->荷兰语': ['zh', 'nl'],
'中文-->泰语': ['zh', 'th'],
'中文-->日语': ['zh', 'jp'],
'日语-->中文': ['jp', 'zh'],
'韩语-->中文': ['kor', 'zh'],
'法语-->中文': ['fra', 'zh'],
'德语-->中文': ['de', 'zh'],
'俄语-->中文': ['ru', 'zh'],
'西班牙语-->中文': ['spa', 'zh'],
'葡萄牙语-->中文': ['pt', 'zh'],
'意大利语-->中文': ['it', 'zh'],
'越南语-->中文': ['vie', 'zh'],
'印尼语-->中文': ['id', 'zh'],
'阿拉伯语-->中文': ['ara', 'zh'],
'荷兰语-->中文': ['nl', 'zh'],
'泰语-->中文': ['th', 'zh']
}
js = open("sign.js", "r")#生成相关的一个参数
run_js = execjs.compile(js.read())
sign = run_js.call("e", content)#e为函数名
js.close()
headers1 = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0",
"Cookie": "BAIDUID=1142AB91A9B514C11E73BD742DC5FE5C:FG=1; BIDUPSID=1142AB91A9B514C1B99F81A532D2E655; PSTM=1634650823; BDRCVFR[gltLrB7qNCt]=mk3SLVN4HKm; delPer=0; PSINO=7; H_PS_PSSID=34444_34067_34712_34584_34517_34832_26350_34828_34868_34473_34672; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1634650973,1634651117; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1634651117; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; __yjs_duid=1_11c84809e4b85738cf11c598a4671c281634650972004"
}
data2 = {
'from': languagedict_[self.language_.currentText()][0],
'to': languagedict_[self.language_.currentText()][1],
'query': content,
'transtype': 'translang',
'simple_means_flag': '3',
'sign': sign,
'token': 'd8ef57d577cfbac850d72d3d6dde0dfb',
'domain': 'common',
}
url1 = "https://fanyi.baidu.com/v2transapi?from={}&to={}".format(languagedict_[self.language_.currentText()][0], languagedict_[self.language_.currentText()][1])
response1 = requests.post(url1, headers=headers1, data=data2).json()
for b in range(len(response1["trans_result"]['data'])):#句子、段落翻译
self.printf(response1["trans_result"]['data'][b]['dst'])
self.printf("")
end4 = time.time()
self.printf("此次翻译所花费的时间为:" + str(int(end4 - start)) + "s")
else:
self.translation.setText("")
self.translation.setText("输入的相应内容为空,请输入翻译内容!")
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "爬虫翻译"))
self.select_.setItemText(0, _translate("MainWindow", "有道翻译"))
self.select_.setItemText(1, _translate("MainWindow", "百度翻译"))
self.select.setItemText(0, _translate("MainWindow", "文字翻译"))
self.select.setItemText(1, _translate("MainWindow", "图片翻译"))
self.language.setItemText(0, _translate("MainWindow", "自动检测语言(有道翻译)"))
self.language.setItemText(1, _translate("MainWindow", "中文-->英语"))
self.language.setItemText(2, _translate("MainWindow", "英语-->中文"))
self.language.setItemText(3, _translate("MainWindow", "中文-->韩语"))
self.language.setItemText(4, _translate("MainWindow", "中文-->法语"))
self.language.setItemText(5, _translate("MainWindow", "中文-->德语"))
self.language.setItemText(6, _translate("MainWindow", "中文-->俄语"))
self.language.setItemText(7, _translate("MainWindow", "中文-->西班牙语"))
self.language.setItemText(8, _translate("MainWindow", "中文-->葡萄牙语"))
self.language.setItemText(9, _translate("MainWindow", "中文-->意大利语"))
self.language.setItemText(10, _translate("MainWindow", "中文-->越南语"))
self.language.setItemText(11, _translate("MainWindow", "中文-->印尼语"))
self.language.setItemText(12, _translate("MainWindow", "中文-->阿拉伯语"))
self.language.setItemText(13, _translate("MainWindow", "中文-->荷兰语"))
self.language.setItemText(14, _translate("MainWindow", "中文-->泰语"))
self.language.setItemText(15, _translate("MainWindow", "中文-->日语"))
self.language.setItemText(16, _translate("MainWindow", "日语-->中文"))
self.language.setItemText(17, _translate("MainWindow", "韩语-->中文"))
self.language.setItemText(18, _translate("MainWindow", "法语-->中文"))
self.language.setItemText(19, _translate("MainWindow", "德语-->中文"))
self.language.setItemText(20, _translate("MainWindow", "俄语-->中文"))
self.language.setItemText(21, _translate("MainWindow", "西班牙语-->中文"))
self.language.setItemText(22, _translate("MainWindow", "葡萄牙语-->中文"))
self.language.setItemText(23, _translate("MainWindow", "意大利语-->中文"))
self.language.setItemText(24, _translate("MainWindow", "越南语-->中文"))
self.language.setItemText(25, _translate("MainWindow", "印尼语-->中文"))
self.language.setItemText(26, _translate("MainWindow", "阿拉伯语-->中文"))
self.language.setItemText(27, _translate("MainWindow", "荷兰语-->中文"))
self.language.setItemText(28, _translate("MainWindow", "泰语-->中文"))
self.language_.setItemText(0, _translate("MainWindow", "中文-->英语(百度翻译)"))
self.language_.setItemText(1, _translate("MainWindow", "英语-->中文"))
self.language_.setItemText(2, _translate("MainWindow", "中文-->粤语"))
self.language_.setItemText(3, _translate("MainWindow", "粤语-->中文"))
self.language_.setItemText(4, _translate("MainWindow", "中文-->文言文"))
self.language_.setItemText(5, _translate("MainWindow", "文言文-->中文"))
self.language_.setItemText(6, _translate("MainWindow", "中文-->中文繁体"))
self.language_.setItemText(7, _translate("MainWindow", "中文繁体-->中文"))
self.language_.setItemText(8, _translate("MainWindow", "中文-->韩语"))
self.language_.setItemText(9, _translate("MainWindow", "中文-->法语"))
self.language_.setItemText(10, _translate("MainWindow", "中文-->德语"))
self.language_.setItemText(11, _translate("MainWindow", "中文-->俄语"))
self.language_.setItemText(12, _translate("MainWindow", "中文-->西班牙语"))
self.language_.setItemText(13, _translate("MainWindow", "中文-->葡萄牙语"))
self.language_.setItemText(14, _translate("MainWindow", "中文-->意大利语"))
self.language_.setItemText(15, _translate("MainWindow", "中文-->越南语"))
self.language_.setItemText(16, _translate("MainWindow", "中文-->印尼语"))
self.language_.setItemText(17, _translate("MainWindow", "中文-->阿拉伯语"))
self.language_.setItemText(18, _translate("MainWindow", "中文-->荷兰语"))
self.language_.setItemText(19, _translate("MainWindow", "中文-->泰语"))
self.language_.setItemText(20, _translate("MainWindow", "中文-->日语"))
self.language_.setItemText(21, _translate("MainWindow", "日语-->中文"))
self.language_.setItemText(22, _translate("MainWindow", "韩语-->中文"))
self.language_.setItemText(23, _translate("MainWindow", "法语-->中文"))
self.language_.setItemText(24, _translate("MainWindow", "德语-->中文"))
self.language_.setItemText(25, _translate("MainWindow", "俄语-->中文"))
self.language_.setItemText(26, _translate("MainWindow", "西班牙语-->中文"))
self.language_.setItemText(27, _translate("MainWindow", "葡萄牙语-->中文"))
self.language_.setItemText(28, _translate("MainWindow", "意大利语-->中文"))
self.language_.setItemText(29, _translate("MainWindow", "越南语-->中文"))
self.language_.setItemText(30, _translate("MainWindow", "印尼语-->中文"))
self.language_.setItemText(31, _translate("MainWindow", "阿拉伯语-->中文"))
self.language_.setItemText(32, _translate("MainWindow", "荷兰语-->中文"))
self.language_.setItemText(33, _translate("MainWindow", "泰语-->中文"))
self.translation.setPlaceholderText(_translate("MainWindow", "请输入翻译内容:"))
self.translationresult.setPlaceholderText(_translate("MainWindow", "翻译结果:"))
self.translate.setText(_translate("MainWindow", "翻译"))
self.clear.setText(_translate("MainWindow", "清空"))
self.copy.setText(_translate("MainWindow", "复制"))
self.paste.setText(_translate("MainWindow", "粘贴"))
self.signup.setText(_translate("MainWindow", "退出"))
self.menu.setTitle(_translate("MainWindow", "文件"))
self.a_open_file.setText(_translate("MainWindow", "读取文件"))
self.a_save_file.setText(_translate("MainWindow", "保存文件"))
self.a_about_.setText(_translate("MainWindow", "关于软件"))
class Window(QMainWindow,Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
def keyPressEvent(self, event):
if (event.key() == Qt.Key_T or event.key() == Qt.Key_Enter):#这里event.key()显示的是按键的编码,按键事件对大小写不敏感
self.fanyi()
if (event.key() == Qt.Key_C):
self.copy_()
if (event.key() == Qt.Key_P):
self.translation.paste()
if (event.key() == Qt.Key_Q):
self.translation.clear()
self.translationresult.clear()
if (event.key() == Qt.Key_Escape):
self.close()
if (event.key() == Qt.Key_R):
self.open_file()
if (event.key() == Qt.Key_S):
self.save_file()
# 当需要组合键时,要很多种方式,这里举例为“shift+单个按键”,也可以采用shortcut、或者pressSequence的方法。
# if (event.key() == Qt.Key_P):
# if QApplication.keyboardModifiers() == Qt.ShiftModifier:
# print("shift + p")
# else :
# print("p")
#
# if (event.key() == Qt.Key_O) and QApplication.keyboardModifiers() == Qt.ShiftModifier:
# print("shift + o")
# # 响应鼠标事件
# def mousePressEvent(self, event):
# if event.button() == Qt.LeftButton:
# print("鼠标左键点击")
# elif event.button() == Qt.RightButton:
# print("鼠标右键点击")
# elif event.button() == Qt.MidButton:
# print("鼠标中键点击")
class Ui_widget(object):
def setupUi(self, widget):
widget.setObjectName("widget")
widget.resize(80, 80)
self.pushButton = QtWidgets.QPushButton(widget)
self.pushButton.setGeometry(QtCore.QRect(10, 10, 60, 60))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(widget)
self.pushButton.clicked.connect(self.xs)
QtCore.QMetaObject.connectSlotsByName(widget)
self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)#设置窗体去掉按钮、去边框、置顶
self.setAttribute(Qt.WA_TranslucentBackground)#设置窗体透明
self.pushButton.setStyleSheet("QPushButton{border-image:url(./xfc.jpg);color:white;border-radius:5px;}QPushButton:hover{border-image:url(./xfc1.jpg);color:gray;}")#设置控件的复合事件
self.pushButton.setCursor(QCursor(Qt.PointingHandCursor))#设置鼠标形状
#显示主界面
def xs(self):
global flag
if flag%2 == 0:
window.close()
else:
screen = QDesktopWidget().screenGeometry()# 获取屏幕坐标系
size = window.geometry() # 获取窗口坐标系
newLeft = (screen.width() - size.width()) / 2 # 计算
newTop = (screen.height() - size.height()) / 2
window.move(int(newLeft), int(newTop) - 42)
window.show()
flag+=1
def retranslateUi(self, widget):
_translate = QtCore.QCoreApplication.translate
widget.setWindowTitle(_translate("widget", "悬浮窗"))
self.pushButton.setText(_translate("widget", ""))
class Windows(QWidget, Ui_widget):
def __init__(self):
super().__init__()
self._startPos = None
self._endPos = None
self._tracking = False
self.setupUi(self)
#重写键盘事件
def keyPressEvent(self, event):
if (event.key() == Qt.Key_Escape):#这里event.key()显示的是按键的编码,按键事件对大小写不敏感
self.close()
window.close()
# 重写移动事件
def mouseMoveEvent(self, e: QMouseEvent):
if self._tracking:
self._endPos = e.pos() - self._startPos
self.move(self.pos() + self._endPos)
def mousePressEvent(self, e: QMouseEvent):
if e.button() == Qt.RightButton:
self._startPos = QPoint(e.x(), e.y())
self._tracking = True
def mouseReleaseEvent(self, e: QMouseEvent):
if e.button() == Qt.RightButton:
self._tracking = False
self._startPos = None
self._endPos = None
#显示悬浮窗
def enterEvent(self, a0):
screen1 = QDesktopWidget().screenGeometry()
w1 = windows.geometry()
if w1.x() == -52:#左侧
self.startAnimation(54,0)
elif w1.y() == -52:#上方
self.startAnimation(0, 54)
elif w1.x() == screen1.width()-84+62:#右侧
self.startAnimation(-54, 0)
elif w1.y() == screen1.height()-84+62:#下方
self.startAnimation(0, -54)
# return super().enterEvent(a0)
#隐藏悬浮窗
def leaveEvent(self,a1):
screen = QDesktopWidget().screenGeometry()
w = windows.geometry()
if w.x() < 10 :#左侧
windows.move(10, w.y())
self.startAnimation(-62, 0)
elif w.y() < 10:#上方
windows.move(w.x(), 10)
self.startAnimation(0, -62)
elif screen.width() - w.x() < 84:#右侧
windows.move(screen.width()-84, w.y())
self.startAnimation(62, 0)
elif screen.height() - w.y() < 84:#下方
windows.move(w.x(), screen.height()-84)
self.startAnimation(0, 62)
def startAnimation(self,x,y):
animation = QPropertyAnimation(windows, b"geometry",self)
startpos = windows.geometry()
newpos = QRect(startpos.x() + x, startpos.y() + y, startpos.width(), startpos.height())
animation.setEndValue(newpos)
animation.setDuration(1000)
animation.start()
if __name__ == '__main__':
imgpath = 'imgflag'
imgdict = {imgpath: 0}
readflag = 0
flag = 1
app = QApplication(sys.argv)
windows = Windows()
window = Window()
windows.show()
sys.exit(app.exec_())