Ejemplo n.º 1
0
    def Login_success(self):
        try:
            self.Settin = SettinInterface(self.screen_scale_rate)  # 设置界面
            self.Init = MainInterface(self.screen_scale_rate,
                                      self.user)  # 翻译界面
            self.chooseRange = Range(self.data["range"]['X1'],
                                     self.data["range"]['Y1'],
                                     self.data["range"]['X2'],
                                     self.data["range"]['Y2'])

            if pyhk is not None:
                self.set_hotKey()  # 设置快捷键
                # 监听快捷键事件加入子线程
                self.thread_hotKey = Thread(target=self.hotKey.start)
                self.thread_hotKey.setDaemon(True)
                self.thread_hotKey.start()
            else:
                # 在mac/ubuntu上用qt自己的热键, 但是不支持全局热键
                self.Init.keyPressEvent = self.keyPressEvent

            # 点击设置键后执行的函数
            self.Init.SettinButton.clicked.connect(self.goto_settin)
            # 点击语言提示按钮
            self.Init.languageText.clicked.connect(self.goto_settin)
            # 点击范围键后执行的函数
            self.Init.RangeButton.clicked.connect(self.goto_range)
            # 点击退出键后执行的函数
            self.Init.QuitButton.clicked.connect(self.close)
            # 点击设置页面的保存键后执行的函数
            self.Settin.SaveButton.clicked.connect(self.updata_Init)
            # 点击设置页面的退出键后执行的函数
            self.Settin.CancelButton.clicked.connect(self.Settin.close)

        except Exception:
            write_error(format_exc())
Ejemplo n.º 2
0
    def updata_Init(self):

        try:
            if self.Init.mode == False:
                self.Init.start_login()
        except Exception:
            write_error(format_exc())
Ejemplo n.º 3
0
    def lock(self):

        try:
            if self.lock_sign == 0:
                self.LockButton.setIcon(qticon('fa.unlock', color='white'))
                self.dragLabel.hide()
                self.lock_sign = 1

                if self.horizontal == 0.01:
                    self.horizontal = 0
            else:
                self.LockButton.setIcon(qticon('fa.lock', color='white'))
                self.LockButton.setStyleSheet(
                    "background-color:rgba(62, 62, 62, 0);")
                self.dragLabel.show()
                self.lock_sign = 0

                if self.horizontal == 0:
                    self.horizontal = 0.01

            self.translateText.setStyleSheet("border-width:0;\
                                              border-style:outset;\
                                              border-top:0px solid #e8f3f9;\
                                              color:white;\
                                              font-weight: bold;\
                                              background-color:rgba(62, 62, 62, %s)"
                                             % (self.horizontal))
        except Exception:
            write_error(format_exc())
Ejemplo n.º 4
0
    def save_voice(self, language=None):

        try:
            if language is None:
                with open(folder_path + '/config/settin.json') as file:
                    data = load(file)
                language = data["language"]
                language = config.voice_language[language]

            content = parse.quote(self.text)
            tk = self.getTk()
            url = "https://translate.google.cn/translate_tts?ie=UTF-8&q=" + content + "&tl=" + language + "&total=1&idx=0&textlen=107&tk=" + tk + "&client=webapp&prev=input"
            res = self.session.get(url, headers=self.headers)

            save_path = folder_path + '/config/voice.mp3'

            if os.path.isfile(save_path):
                os.remove(save_path)

            with open(save_path, 'wb') as file:
                file.write(res.content)

            # 没有gi解决办法(https://blog.csdn.net/xxxlinttp/article/details/78056467):
            # 复制一份/home/ming/miniconda3/envs/python36/lib/python3.6/site-packages/gi到自己的虚拟环境
            # playsound(folder_path + '/config/voice.mp3')
            return True, save_path

        except Exception:
            write_error(format_exc())
            return False, ''
Ejemplo n.º 5
0
 def mouseMoveEvent(self, e: QMouseEvent):
     try:
         if self._startPos is not None:
             self._endPos = e.pos() - self._startPos
             self.move(self.pos() + self._endPos)
     except Exception:
         write_error(format_exc())
Ejemplo n.º 6
0
 def mousePressEvent(self, e: QMouseEvent):
     try:
         if e.button() == Qt.LeftButton:
             self._isTracking = True
             self._startPos = QPoint(e.x(), e.y())
     except Exception:
         write_error(format_exc())
Ejemplo n.º 7
0
    def enterEvent(self, QEvent):

        if self.lock_sign == 1:
            self.LockButton.show()
            self.LockButton.setStyleSheet(
                "background-color:rgba(62, 62, 62, 0.7);")
            return

        try:
            # 显示所有顶部工具栏控件
            self.switchBtn.show()
            self.StartButton.show()
            self.SettinButton.show()
            self.RangeButton.show()
            self.OpenButton.show()
            self.CopyButton.show()
            self.QuitButton.show()
            self.MinimizeButton.show()
            self.playVoiceButton.show()
            self.LockButton.show()
            self.languageText.show()

            self.setStyleSheet(
                'QLabel#dragLabel {background-color:rgba(62, 62, 62, 0.3)}')

        except Exception:
            write_error(format_exc())
Ejemplo n.º 8
0
    def leaveEvent(self, QEvent):

        try:
            # 重置所有控件的位置和大小
            width = (self.width() * 213) / 800
            height = self.height() - 30

            self.RangeButton.setGeometry(
                QRect(width - 20 * self.rate, 5 * self.rate, 20 * self.rate,
                      20 * self.rate))
            self.StartButton.setGeometry(
                QRect(width + 20 * self.rate, 5 * self.rate, 20 * self.rate,
                      20 * self.rate))
            self.OpenButton.setGeometry(
                QRect(width + 60 * self.rate, 5 * self.rate, 20 * self.rate,
                      20 * self.rate))
            self.CopyButton.setGeometry(
                QRect(width + 100 * self.rate, 5 * self.rate, 20 * self.rate,
                      20 * self.rate))
            self.playVoiceButton.setGeometry(
                QRect(width + 140 * self.rate, 5 * self.rate, 20 * self.rate,
                      20 * self.rate))
            self.switchBtn.setGeometry(
                QRect(width + 180 * self.rate, 5 * self.rate, 50 * self.rate,
                      20 * self.rate))
            self.languageText.setGeometry(width + 250 * self.rate,
                                          5 * self.rate, 45 * self.rate,
                                          20 * self.rate)
            self.SettinButton.setGeometry(
                QRect(width + 305 * self.rate, 5 * self.rate, 20 * self.rate,
                      20 * self.rate))
            self.LockButton.setGeometry(
                QRect(width + 345 * self.rate, 5 * self.rate, 24 * self.rate,
                      20 * self.rate))
            self.MinimizeButton.setGeometry(
                QRect(width + 389 * self.rate, 5 * self.rate, 20 * self.rate,
                      20 * self.rate))
            self.QuitButton.setGeometry(
                QRect(width + 429 * self.rate, 5 * self.rate, 20 * self.rate,
                      20 * self.rate))
            self.translateText.setGeometry(0, 30 * self.rate, self.width(),
                                           height * self.rate)

            # 隐藏所有顶部工具栏控件
            self.switchBtn.hide()
            self.StartButton.hide()
            self.SettinButton.hide()
            self.RangeButton.hide()
            self.OpenButton.hide()
            self.CopyButton.hide()
            self.QuitButton.hide()
            self.MinimizeButton.hide()
            self.playVoiceButton.hide()
            self.LockButton.hide()
            self.languageText.hide()

            self.setStyleSheet('QLabel#dragLabel {background-color:none}')

        except Exception:
            write_error(format_exc())
Ejemplo n.º 9
0
    def save_text(self):
        try:
            time_array = localtime(int(time()))
            str_date = strftime("DangoOCR_%Y-%m-%d_%H-%M-%S", time_array)
            default_name = self.default_save_path[0] + "/" + str_date
            save_p, extend = QFileDialog.getSaveFileName(
                self, 'save file', default_name, "txt (*.txt);;docx (*.docx)")

            if '.txt' in extend:
                if save_p[-4:] != '.txt':
                    save_p += '.txt'
                imwrite(save_p[:-4] + ".jpg", self.np_img)
                with open(save_p, 'w', encoding='utf-8') as f:
                    for vis_text in self.vis_text_result:
                        f.write(vis_text.toPlainText() + "\n")
            elif '.docx' in extend:
                if save_p[-5:] != '.docx':
                    save_p += '.docx'
                imwrite(save_p[:-5] + ".jpg", self.np_img)
                document = Document()
                for vis_text in self.vis_text_result:
                    document.add_paragraph(vis_text.toPlainText())
                document.save(save_p)
            if save_p != '':
                self.default_save_path[0] = dirname(save_p)
        except Exception:
            write_error(format_exc())
Ejemplo n.º 10
0
 def mouseReleaseEvent(self, e: QMouseEvent):
     try:
         if e.button() == Qt.LeftButton:
             self._isTracking = False
             self._startPos = None
             self._endPos = None
     except Exception:
         write_error(format_exc())
Ejemplo n.º 11
0
    def mouseMoveEvent(self, event):

        try:
            if self.isDrawing:
                self.endPoint = event.pos()
                self.update()
        except Exception:
            write_error(format_exc())
Ejemplo n.º 12
0
    def mousePressEvent(self, event):

        try:
            if event.button() == Qt.LeftButton:
                self.startPoint = event.pos()
                self.endPoint = self.startPoint
                self.isDrawing = True
        except Exception:
            write_error(format_exc())
Ejemplo n.º 13
0
    def mouseMoveEvent(self, e: QMouseEvent):

        if self.lock_sign == 1:
            return

        try:
            self._endPos = e.pos() - self._startPos
            self.move(self.pos() + self._endPos)
        except Exception:
            write_error(format_exc())
Ejemplo n.º 14
0
    def mouseReleaseEvent(self, event):

        try:
            if event.button() == Qt.LeftButton:
                self.endPoint = event.pos()
                self.getRange()

                self.close()
                self.updata_Init()
        except Exception:
            write_error(format_exc())
Ejemplo n.º 15
0
 def enterEvent(self, QEvent):
     try:
         rect = self.geometry()
         X1 = rect.left()
         Y1 = rect.top()
         X2 = rect.left() + rect.width()
         Y2 = rect.top() + rect.height()
         self.Button.setGeometry(QRect(X2 - X1 - 40, 0, 40, 30))
         self.Button.show()
         self.dragLabel.setStyleSheet(
             "background-color:rgba(62, 62, 62, 0.3)")
     except Exception:
         write_error(format_exc())
Ejemplo n.º 16
0
    def paintEvent(self, event):

        try:
            if self.isDrawing:
                self.mask = self.blackMask.copy()
                pp = QPainter(self.mask)
                pen = QPen()
                pen.setStyle(Qt.NoPen)
                pp.setPen(pen)
                brush = QBrush(Qt.white)
                pp.setBrush(brush)
                pp.drawRect(QRect(self.startPoint, self.endPoint))
                self.setMask(QBitmap(self.mask))
        except Exception:
            write_error(format_exc())
Ejemplo n.º 17
0
    def set_hotKey(self):

        try:
            self.hotKey = pyhk()
            self.id_translate = False  # 翻译快捷键预设
            self.id_range = False  # 范围快捷键预设

            # 是否启用翻译键快捷键
            if self.data["showHotKey1"] == "True":
                self.id_translate = self.hotKey.addHotkey(
                    [self.data["showHotKeyValue1"]], self.Init.start_login)
            # 是否截图键快捷键
            if self.data["showHotKey2"] == "True":
                self.id_range = self.hotKey.addHotkey(
                    [self.data["showHotKeyValue2"]], self.goto_range)

        except Exception:
            write_error(format_exc())
Ejemplo n.º 18
0
    def __init__(self, X1, Y1, X2, Y2):

        try:
            super(Range, self).__init__()
            self.setGeometry(X1, Y1, X2 - X1, Y2 - Y1)

            # 窗口无标题栏、窗口置顶、窗口透明
            self.setWindowFlags(Qt.WindowStaysOnTopHint
                                | Qt.FramelessWindowHint | Qt.Tool)
            self.setAttribute(Qt.WA_TranslucentBackground)

            self.Label = QLabel(self)
            self.Label.setObjectName("dragLabel")
            self.Label.setGeometry(0, 0, X2 - X1, Y2 - Y1)
            self.Label.setStyleSheet("border-width:1;\
                                  border:2px dashed #1E90FF;\
                                  background-color:rgba(62, 62, 62, 0.01)")

            # 此Label用于当鼠标进入界面时给出颜色反应
            self.dragLabel = QLabel(self)
            self.dragLabel.setObjectName("dragLabel")
            self.dragLabel.setGeometry(0, 0, 4000, 2000)

            self.Font = QFont()
            self.Font.setFamily("华康方圆体W7")
            self.Font.setPointSize(12)

            # 隐藏按钮
            self.Button = QPushButton(self)
            self.Button.setGeometry(QRect(X2 - X1 - 40, 0, 40, 30))
            self.Button.setStyleSheet("background-color:rgba(62, 62, 62, 0.3);"
                                      "color:#1E90FF")
            self.Button.setFont(self.Font)
            self.Button.setText("隐藏")
            self.Button.setCursor(QCursor(Qt.PointingHandCursor))
            self.Button.clicked.connect(self.close)
            self.Button.hide()

            # 右下角用于拉伸界面的控件
            self.statusbar = QStatusBar(self)
            self.setStatusBar(self.statusbar)
            self._startPos = None
        except Exception:
            write_error(format_exc())
Ejemplo n.º 19
0
    def play_voice(self):
        if not self.original:
            return
        try:
            # thread = Thread(target=Voice, args=(self.original,))
            # thread.setDaemon(True)
            # thread.start()

            self.player = None
            flag, voice_file = Voice(self.original).save_voice()
            if flag:
                file = QUrl.fromLocalFile(voice_file)
                content = QMediaContent(file)
                self.player = QMediaPlayer()
                self.player.setMedia(content)
                self.player.play()

        except Exception:
            write_error(format_exc())
Ejemplo n.º 20
0
    def display_text(self, result, data, translate_type):

        try:
            if data["showColorType"] == "False":
                self.format.setTextOutline(
                    QPen(QColor(data["fontColor"][translate_type]), 0.7,
                         Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
                self.translateText.mergeCurrentCharFormat(self.format)
                self.translateText.append(result)
            else:
                self.translateText.append(
                    "<font color=%s>%s</font>" %
                    (data["fontColor"][translate_type], result))

            # 保存译文
            self.save_text(result, translate_type)
            self.thread_state -= 1  # 线程结束,减少线程数
        except Exception:
            write_error(format_exc())
Ejemplo n.º 21
0
    def main(self):

        try:
            self.screen_scale_rate = get_screen_rate()

            self.open_settin()
            self.data["sign"] = 1  # 重置运行状态标志符
            self.save_settin()

            App = QApplication(sys.argv)

            self.user = "******"
            self.Login_success()
            self.Init.show()

            App.exit(App.exec_())

        except Exception:
            write_error(format_exc())
Ejemplo n.º 22
0
    def goto_range(self):

        try:
            self.Range = WScreenShot(self.Init, self.chooseRange)  # 范围界面
            # 判断当前翻译运行状态,若为开始则切换为停止
            if self.Init.mode == True:
                self.open_settin()
                self.data["sign"] = 1  # 重置运行状态标志符
                self.save_settin()
                # 改变翻译键的图标为停止图标
                self.Init.StartButton.setIcon(qticon('fa.play', color='white'))

            self.Range.show()  # 打开范围界面
            self.Init.show()  # 翻译界面会被顶掉,再次打开

            if pyhk is not None and not self.thread_hotKey.isAlive():
                self.thread_hotKey.start()

        except Exception:
            write_error(format_exc())
Ejemplo n.º 23
0
def image_cut(data):
    x1 = data["range"]['X1'] + 2  # 不截虚线框
    y1 = data["range"]['Y1'] + 2
    x2 = data["range"]['X2'] - 2
    y2 = data["range"]['Y2'] - 2

    image = None
    try:
        screen = QApplication.primaryScreen()
        pix = screen.grabWindow(QApplication.desktop().winId(), x1, y1,
                                x2 - x1, y2 - y1)
        # pix.save(folder_path + '/config/image.jpg')
        image = pixmap_to_array(pix)
        # if config.debug:
        #     save_img = folder_path + '/config/image.jpg'
        #     print("保存截图: {}".format(save_img))
        #     imwrite(save_img, image)

    except Exception:
        write_error(format_exc())
    return image
Ejemplo n.º 24
0
    def leaveEvent(self, QEvent):
        try:
            self.dragLabel.setStyleSheet("background-color:none")
            self.Label.setGeometry(0, 0, self.width(), self.height())
            self.Button.hide()

            rect = self.geometry()
            X1 = rect.left()
            Y1 = rect.top()
            X2 = rect.left() + rect.width()
            Y2 = rect.top() + rect.height()
            set_path = folder_path + '/config/settin.json'
            with open(set_path) as file:
                data = load(file)
                data["range"]["X1"] = X1
                data["range"]["Y1"] = Y1
                data["range"]["X2"] = X2
                data["range"]["Y2"] = Y2
            with open(set_path, 'w') as file:
                dump(data, file, indent=2)

        except Exception:
            write_error(format_exc())
Ejemplo n.º 25
0
    def run(self):

        with open(folder_path + '/config/settin.json') as file:
            data = load(file)

        if not self.mode:
            try:
                if self.window.thread_state == 0:
                    translate(self.window, data, self.use_translate_signal)

            except Exception:
                write_error(format_exc())
        else:
            data["sign"] += 1
            with open(folder_path + '/config/settin.json', 'w') as file:
                dump(data, file, indent=2)
            try:
                if data["sign"] % 2 == 0:
                    self.window.StartButton.setIcon(
                        qticon('fa.pause', color='white'))

                while True:
                    s1 = time()
                    with open(folder_path + '/config/settin.json') as file:
                        data = load(file)

                    if data["sign"] % 2 == 0:
                        try:
                            if self.window.thread_state == 0:
                                s2 = time()
                                if s2 - s1 < config.delay_time:
                                    sleep_time = config.delay_time - (s2 - s1)
                                    if config.debug:
                                        print("自动模式 限制帧率, sleep 时间: {}".format(
                                            sleep_time))
                                    sleep(sleep_time)

                                translate(self.window, data,
                                          self.use_translate_signal)

                        except Exception:
                            write_error(format_exc())
                            break
                    else:
                        self.window.StartButton.setIcon(
                            qticon('fa.play', color='white'))
                        break

            except Exception:
                write_error(format_exc())
Ejemplo n.º 26
0
# _*_ coding:UTF-8 _*_

try:
    from pythoncom import PumpMessages
    from PyHook3 import HookManager
    from ctypes import windll
    from _thread import start_new_thread

    pyhook_flag = True
except:
    from src.api import write_error
    from configs import Config
    write_error("[INFO] 系统 {} 无法设置全局快捷键, 使用Qt自己的热键".format(Config().platform))
    pyhook_flag = False


class pyhook:
    """Hotkey class extending PyHook3"""
    def __init__(self):
        # initiate internal hotkey list
        self.KeyDownID = []
        self.KeyDown = []

        # initiate user hotkey list
        self.UserHKF = []
        self.UserHKFUp = []
        self.HKFIDDict = {}

        # create Lookup for event keys and ids
        # for keyboards
        self.ID2Key, self.Key2ID = self.createKeyLookup()
Ejemplo n.º 27
0
try:
    from win32.lib import win32con
    from win32.win32api import GetSystemMetrics
    from win32.win32gui import GetDC
    from win32.win32print import GetDeviceCaps

    win32_flag = True
except:
    win32_flag = False
    screen_scale_rate_ = 1

    from src.api import write_error
    from configs import Config

    write_error("[INFO] 系统 {} 没有win32, 无法自动获取屏幕缩放比例,设置为: {}".format(
        Config().platform, screen_scale_rate_))


def get_real_resolution():
    """获取真实的分辨率"""
    hDC = GetDC(0)
    # 横向分辨率
    w = GetDeviceCaps(hDC, win32con.DESKTOPHORZRES)
    # 纵向分辨率
    h = GetDeviceCaps(hDC, win32con.DESKTOPVERTRES)
    return w, h


def get_screen_size():
    """获取缩放后的分辨率"""
    w = GetSystemMetrics(0)