Skip to content

Commit

Permalink
fix: 防止复制时翻译
Browse files Browse the repository at this point in the history
  • Loading branch information
yuhldr committed Nov 23, 2024
1 parent 6abff63 commit 61d90d3
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 11 deletions.
25 changes: 21 additions & 4 deletions lfy/qt/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,26 @@
import time

from PyQt6.QtCore import QThread, pyqtSignal
from PyQt6.QtCore import Qt, QThread, pyqtSignal
from PyQt6.QtWidgets import QPlainTextEdit


class MyPlainTextEdit(QPlainTextEdit):
"""禁止复制响应
Args:
QPlainTextEdit (_type_): _description_
"""
def keyPressEvent(self, event):
"""内部的ctrl c不要响应
Args:
event (_type_): _description_
"""
if event.modifiers() == Qt.KeyboardModifier.ControlModifier and event.key() == Qt.Key.Key_C:
print("no copy")
event.accept() # 阻止事件传播,防止触发 QClipboard 的复制
else:
super().keyPressEvent(event)


class MyThread(QThread):
Expand All @@ -11,9 +31,6 @@ def __init__(self, fun, param=None):
self.param = param
super().__init__()

def __del__(self):
self.wait()

def run(self):
start_ = time.time()
result = self.fun(self.param)
Expand Down
33 changes: 26 additions & 7 deletions lfy/qt/translate.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,17 @@
from gettext import gettext as _

from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import (QApplication, QCheckBox, QComboBox, QHBoxLayout,
QMainWindow, QPushButton, QSplitter, QTextEdit,
from PyQt6.QtGui import QKeyEvent
from PyQt6.QtWidgets import (QCheckBox, QComboBox, QHBoxLayout, QMainWindow,
QPushButton, QSplitter, QSystemTrayIcon,
QVBoxLayout, QWidget)

from lfy import APP_NAME
from lfy.api import (create_server_o, create_server_t, get_lang,
get_lang_names, get_server_names_t, get_server_t,
lang_n2j, server_key2i)
from lfy.api.server import Server
from lfy.qt import MyThread
from lfy.qt import MyPlainTextEdit, MyThread
from lfy.utils import cal_md5, process_text
from lfy.utils.settings import Settings

Expand All @@ -22,6 +23,7 @@ class TranslateWindow(QMainWindow):
Args:
QMainWindow (_type_): _description_
"""

def __init__(self):
super().__init__()

Expand All @@ -36,7 +38,7 @@ def __init__(self):
splitter = QSplitter(Qt.Orientation.Vertical, self)

# 上面的文本编辑框
self.te_from = QTextEdit(self)
self.te_from = MyPlainTextEdit(self)

# 中间的布局(包含选择按钮和普通按钮)
middle_widget = QWidget(self)
Expand Down Expand Up @@ -68,7 +70,7 @@ def __init__(self):
middle_layout.addWidget(self.cb_add_old)
middle_layout.addWidget(self.btn_translate)
# 下面的文本编辑框
self.te_to = QTextEdit(self)
self.te_to = MyPlainTextEdit(self)

bottom_layout.addWidget(middle_widget)
bottom_layout.addWidget(self.te_to)
Expand All @@ -86,7 +88,7 @@ def __init__(self):
self.server_t = None
self.lang_t = None
self.my_thread = None
self.tray = None
self.tray: QSystemTrayIcon = None
self.text_last = ""
self.img_md5 = ""

Expand Down Expand Up @@ -114,6 +116,17 @@ def set_data(self):
self.cb_lang.setCurrentIndex(j)
self.cb_del_wrapping.setChecked(True)

def keyPressEvent(self, event: QKeyEvent):
"""监听键盘
Args:
event (QKeyEvent): _description_
"""
if event.key() == Qt.Key.Key_T and event.modifiers() == Qt.KeyboardModifier.ControlModifier:
self.update_translate()
else:
super().keyPressEvent(event)

def _on_server_changed(self):
i = self.cb_server.currentIndex()
j = lang_n2j(i, self.s.g("lang-selected-n", 0, int))
Expand Down Expand Up @@ -155,6 +168,7 @@ def ocr_image(self, img_path):
if self.img_md5 == md5_hash:
return
self.img_md5 = md5_hash

def oo(_p=None):
_ok, text_from = self.server_o.ocr_image(img_path)
return (_ok, text_from)
Expand Down Expand Up @@ -183,9 +197,9 @@ def set_text_from_to(self, text):
self.te_to.setPlainText(text_to)

if "..." != text_to[-3:]:
self.my_thread = None
self.tray.show_msg("翻译成功!", text_to)
self.text_last = text_from
self.cleanup_thread()

def update_translate(self, reload=True):
"""无参数翻译
Expand Down Expand Up @@ -220,3 +234,8 @@ def tt(_p=None):
self.my_thread = MyThread(tt)
self.my_thread.signal.connect(self.set_text_from_to)
self.my_thread.start()

def cleanup_thread(self):
self.my_thread.quit() # 确保线程正常退出
self.my_thread.wait() # 等待线程结束
self.my_thread.deleteLater() # 删除线程,释放资源

0 comments on commit 61d90d3

Please sign in to comment.