mirror of
https://github.com/HIllya51/LunaTranslator.git
synced 2024-12-29 16:44:13 +08:00
issues/527 issues/528
This commit is contained in:
parent
31f04609fc
commit
18c9608c3d
@ -38,11 +38,10 @@ class _autolock:
|
||||
def __del__(self):
|
||||
self.lock.release()
|
||||
class MAINUI() :
|
||||
def __init__(self,app) -> None:
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
self.lasttranslatorindex=0
|
||||
self.usefultranslators=0
|
||||
self.app=app
|
||||
self.translators={}
|
||||
self.cishus={}
|
||||
self.reader=None
|
||||
|
@ -74,7 +74,7 @@ if __name__ == "__main__" :
|
||||
getQMessageBox(None,"错误","当前路径读写权限不足,请使用管理员权限运行!")
|
||||
os._exit(0)
|
||||
|
||||
gobject.baseobject=MAINUI(app)
|
||||
gobject.baseobject=MAINUI()
|
||||
gobject.baseobject.checklang()
|
||||
gobject.baseobject.aa()
|
||||
app.exit(app.exec_())
|
||||
|
@ -1,7 +1,7 @@
|
||||
from PyQt5.QtWidgets import QWidget,QDesktopWidget,QMainWindow,QLabel,QPushButton,QStatusBar,QDialog,QApplication
|
||||
from PyQt5.QtWidgets import QMenu,QDesktopWidget,QMainWindow,QLabel,QAction,QStatusBar,QDialog,QApplication
|
||||
from PyQt5.QtGui import QBitmap,QPainter,QPen,QColor,QFont,QMouseEvent,QCursor
|
||||
from PyQt5.QtCore import Qt,QPoint,QRect,QEvent,pyqtSignal
|
||||
|
||||
from myutils.config import _TR
|
||||
import gobject
|
||||
from myutils.config import globalconfig
|
||||
from gui.resizeablemainwindow import Mainw
|
||||
@ -19,9 +19,19 @@ class rangeadjust(Mainw) :
|
||||
self._rect=None
|
||||
self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.Tool)
|
||||
self.setAttribute(Qt.WA_TranslucentBackground)
|
||||
|
||||
self.setContextMenuPolicy(Qt.CustomContextMenu)
|
||||
self.customContextMenuRequested.connect(self.showmenu)
|
||||
for s in self.cornerGrips:
|
||||
s.raise_()
|
||||
def showmenu(self,p):
|
||||
menu=QMenu(self )
|
||||
close=QAction(_TR("关闭"))
|
||||
menu.addAction(close)
|
||||
action=menu.exec(self.mapToGlobal(p))
|
||||
if action==close:
|
||||
self._rect=None
|
||||
self.close()
|
||||
|
||||
def setstyle(self):
|
||||
self.label.setStyleSheet(" border:%spx solid %s; background-color: rgba(0,0,0, 0.01)" %(globalconfig['ocrrangewidth'],globalconfig['ocrrangecolor'] ))
|
||||
def mouseMoveEvent(self, e ) :
|
||||
@ -39,7 +49,8 @@ class rangeadjust(Mainw) :
|
||||
self._endPos = None
|
||||
def moveEvent(self,e):
|
||||
rect = self.geometry()
|
||||
self._rect=[(rect.left()+globalconfig['ocrrangewidth'],rect.top()+globalconfig['ocrrangewidth']),(rect.right()-globalconfig['ocrrangewidth'],rect.bottom()-globalconfig['ocrrangewidth'])]
|
||||
if self._rect:
|
||||
self._rect=[(rect.left()+globalconfig['ocrrangewidth'],rect.top()+globalconfig['ocrrangewidth']),(rect.right()-globalconfig['ocrrangewidth'],rect.bottom()-globalconfig['ocrrangewidth'])]
|
||||
def enterEvent(self, QEvent) :
|
||||
self.drag_label.setStyleSheet("background-color:rgba(0,0,0, 0.1)")
|
||||
def leaveEvent(self, QEvent):
|
||||
@ -48,11 +59,17 @@ class rangeadjust(Mainw) :
|
||||
|
||||
self.label.setGeometry(0, 0, self.width(), self.height())
|
||||
rect = self.geometry()
|
||||
self._rect=[(rect.left()+globalconfig['ocrrangewidth'],rect.top()+globalconfig['ocrrangewidth']),(rect.right()-globalconfig['ocrrangewidth'],rect.bottom()-globalconfig['ocrrangewidth'])]
|
||||
if self._rect:
|
||||
self._rect=[(rect.left()+globalconfig['ocrrangewidth'],rect.top()+globalconfig['ocrrangewidth']),(rect.right()-globalconfig['ocrrangewidth'],rect.bottom()-globalconfig['ocrrangewidth'])]
|
||||
super(rangeadjust, self).resizeEvent(a0)
|
||||
def getrect(self):
|
||||
return self._rect
|
||||
|
||||
def setrect(self,rect):
|
||||
self._rect=rect
|
||||
if rect:
|
||||
(x1,y1),(x2,y2)=rect
|
||||
self.setGeometry(x1-globalconfig['ocrrangewidth'],y1-globalconfig['ocrrangewidth'],x2-x1+2*globalconfig['ocrrangewidth'],y2-y1+2*globalconfig['ocrrangewidth'])
|
||||
self.show()
|
||||
class rangeselct(QMainWindow) :
|
||||
def __init__(self, parent ) :
|
||||
|
||||
|
@ -50,6 +50,8 @@ def getocrgrid(self) :
|
||||
|
||||
[],
|
||||
[(("多重区域模式"),12),getsimpleswitch(globalconfig ,'multiregion')],
|
||||
[(("记忆选定区域"),12),getsimpleswitch(globalconfig ,'rememberocrregions')],
|
||||
[],
|
||||
[(("OCR范围框颜色"),12),(getcolorbutton(globalconfig,'ocrrangecolor',callback=lambda : selectcolor(self,globalconfig,'ocrrangecolor',self.ocrrangecolor_button,callback=lambda :gobject.baseobject.textsource.setstyle()),name='ocrrangecolor_button',parent=self),1)],
|
||||
[(("OCR范围框宽度"),12),(getspinbox(1,100,globalconfig,'ocrrangewidth' ,callback=lambda x: gobject.baseobject.textsource.setstyle() ),4)],
|
||||
[(("选取OCR范围后立即进行一次识别"),12),getsimpleswitch(globalconfig ,'ocrafterrangeselect')],
|
||||
|
@ -669,12 +669,12 @@ class QUnFrameWindow(resizableframeless):
|
||||
self.tray.hide()
|
||||
self.tray = None
|
||||
self.hide()
|
||||
saveallconfig()
|
||||
|
||||
if gobject.baseobject.textsource:
|
||||
|
||||
gobject.baseobject.textsource=None
|
||||
|
||||
saveallconfig()
|
||||
|
||||
endsubprocs()
|
||||
os._exit(0)
|
@ -382,7 +382,10 @@ def selectcolor(parent,configdict,configkey,button,item=None,name=None,callback=
|
||||
configdict[configkey]=color.name()
|
||||
|
||||
if callback:
|
||||
callback()
|
||||
try:
|
||||
callback()
|
||||
except:
|
||||
print_exc()
|
||||
|
||||
def getboxlayout(widgets,lc=QHBoxLayout):
|
||||
cp_layout=lc()
|
||||
|
@ -45,6 +45,11 @@ class ocrtext(basetext):
|
||||
self.range_ui = []
|
||||
self.timestamp=time.time()
|
||||
super(ocrtext,self ).__init__('0','ocr')
|
||||
if globalconfig['rememberocrregions']:
|
||||
for region in globalconfig['ocrregions']:
|
||||
if region:
|
||||
self.newrangeadjustor()
|
||||
self.setrect(region)
|
||||
def newrangeadjustor(self):
|
||||
if len(self.range_ui)==0 or globalconfig['multiregion']:
|
||||
self.range_ui.append(rangeadjust(gobject.baseobject.translation_ui))
|
||||
@ -56,13 +61,13 @@ class ocrtext(basetext):
|
||||
for _r in self.range_ui:
|
||||
_r.move(_r.pos().x()+ x,_r.pos().y()+ y)
|
||||
def setrect(self,rect):
|
||||
(x1,y1),(x2,y2)=rect
|
||||
self.range_ui[-1].setGeometry(x1-globalconfig['ocrrangewidth'],y1-globalconfig['ocrrangewidth'],x2-x1+2*globalconfig['ocrrangewidth'],y2-y1+2*globalconfig['ocrrangewidth'])
|
||||
self.range_ui[-1].show()
|
||||
self.range_ui[-1].setrect(rect)
|
||||
def setstyle(self):
|
||||
[_.setstyle() for _ in self.range_ui]
|
||||
def showhiderangeui(self,b):
|
||||
[_.setVisible(b) for _ in self.range_ui]
|
||||
for _ in self.range_ui:
|
||||
if _.getrect():
|
||||
_.setVisible(b)
|
||||
def gettextthread(self ):
|
||||
if all([_.getrect() is None for _ in self.range_ui]):
|
||||
time.sleep(1)
|
||||
@ -155,6 +160,7 @@ class ocrtext(basetext):
|
||||
|
||||
|
||||
def end(self):
|
||||
globalconfig['ocrregions']=[_.getrect() for _ in self.range_ui]
|
||||
[_.close() for _ in self.range_ui]
|
||||
super().end()
|
||||
ocr_end()
|
||||
[_.close() for _ in self.range_ui]
|
@ -97,6 +97,8 @@
|
||||
500
|
||||
],
|
||||
"multiregion":false,
|
||||
"rememberocrregions":false,
|
||||
"ocrregions":[],
|
||||
"textboxreadonly":true,
|
||||
"ocr_stable_sim": 0,
|
||||
"ocr_diff_sim": 0.95,
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"version":"v2.37.0",
|
||||
"version":"v2.37.1",
|
||||
"language_list_show":["简体中文","日本語","English","Русский язык","Español","한국어","Français","繁體中文","Tiếng Việt","Türkçe","Polski","Українська Мова","Italiano","اللغة العربية","ภาษาไทย"] ,
|
||||
"language_list_translator":["简体中文","日文","英文","俄语","西班牙语","韩语","法语","繁体中文","越南语","土耳其语","波兰语","乌克兰语","意大利语","阿拉伯语","泰语"],
|
||||
"language_list_translator_inner":["zh", "ja", "en","ru","es","ko","fr","cht","vi","tr","pl","uk","it","ar","th"],
|
||||
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "استخدام النموذج الياباني بدلا من ذلك ، قد لا تعمل بشكل جيد",
|
||||
"保持非重复字符": "الحفاظ على الطابع غير المتكرر",
|
||||
"选择文本窗口中文本框只读": "حدد مربع النص للقراءة فقط في نافذة النص",
|
||||
"多重区域模式": "وضع منطقة متعددة"
|
||||
"多重区域模式": "وضع منطقة متعددة",
|
||||
"记忆选定区域": "اختيار الذاكرة",
|
||||
"关闭": "غلق"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "正在使用日語模型作為代替,可能效果不佳",
|
||||
"保持非重复字符": "保持非重複字元",
|
||||
"选择文本窗口中文本框只读": "選擇文字視窗中文字方塊只讀",
|
||||
"多重区域模式": "多重區域模式"
|
||||
"多重区域模式": "多重區域模式",
|
||||
"记忆选定区域": "記憶選定區域",
|
||||
"关闭": "關閉"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "Using Japanese models as a substitute may not be effective",
|
||||
"保持非重复字符": "Keep non repeating characters",
|
||||
"选择文本窗口中文本框只读": "Select read-only text boxes in the text window",
|
||||
"多重区域模式": "Multi region mode"
|
||||
"多重区域模式": "Multi region mode",
|
||||
"记忆选定区域": "Memory selection area",
|
||||
"关闭": "close"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "Se está utilizando el modelo japonés como sustituto y puede que no funcione bien",
|
||||
"保持非重复字符": "Mantener caracteres no repetitivos",
|
||||
"选择文本窗口中文本框只读": "Seleccione la ventana de texto en la que el cuadro de texto es de solo lectura",
|
||||
"多重区域模式": "Modelo multiregional"
|
||||
"多重区域模式": "Modelo multiregional",
|
||||
"记忆选定区域": "Área seleccionada de memoria",
|
||||
"关闭": "Cierre"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "Le modèle japonais est utilisé à la place, peut ne pas fonctionner aussi bien",
|
||||
"保持非重复字符": "Garder les caractères non répétitifs",
|
||||
"选择文本窗口中文本框只读": "Sélectionner une zone de texte en lecture seule dans la fenêtre de texte",
|
||||
"多重区域模式": "Mode Multi - zones"
|
||||
"多重区域模式": "Mode Multi - zones",
|
||||
"记忆选定区域": "Mémoriser la zone sélectionnée",
|
||||
"关闭": "Fermé"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "Utilizzare modelli giapponesi come sostituto potrebbe non essere efficace",
|
||||
"保持非重复字符": "Mantieni caratteri non ripetuti",
|
||||
"选择文本窗口中文本框只读": "Selezionare le caselle di testo di sola lettura nella finestra di testo",
|
||||
"多重区域模式": "Modalità multi regione"
|
||||
"多重区域模式": "Modalità multi regione",
|
||||
"记忆选定区域": "Area di selezione della memoria",
|
||||
"关闭": "chiudi"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "代替として日本語モデルを使用していますが、効果が低いかもしれません",
|
||||
"保持非重复字符": "非反復文字の維持",
|
||||
"选择文本窗口中文本框只读": "テキストウィンドウのテキストボックス読み取り専用を選択",
|
||||
"多重区域模式": "複数領域モード"
|
||||
"多重区域模式": "複数領域モード",
|
||||
"记忆选定区域": "メモリ選択領域",
|
||||
"关闭": "閉じる"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "일본어 모델을 대체하는 중입니다. 효과가 없을 수 있습니다",
|
||||
"保持非重复字符": "비반복 문자 유지",
|
||||
"选择文本窗口中文本框只读": "텍스트 선택 창의 텍스트 상자 읽기 전용",
|
||||
"多重区域模式": "다중 영역 모드"
|
||||
"多重区域模式": "다중 영역 모드",
|
||||
"记忆选定区域": "선택한 영역 기억하기",
|
||||
"关闭": "닫기"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "Używanie japońskich modeli jako substytutów może nie być skuteczne",
|
||||
"保持非重复字符": "Zachowaj niepowtarzające się znaki",
|
||||
"选择文本窗口中文本框只读": "Zaznaczanie pola tekstowe tylko do odczytu w oknie tekstowym",
|
||||
"多重区域模式": "Tryb wielu regionów"
|
||||
"多重区域模式": "Tryb wielu regionów",
|
||||
"记忆选定区域": "Obszar wyboru pamięci",
|
||||
"关闭": "zamknij"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "В качестве замены используется японская модель, которая может быть неэффективной",
|
||||
"保持非重复字符": "Сохранить символ без повторения",
|
||||
"选择文本窗口中文本框只读": "Выберите текстовое окно только для чтения",
|
||||
"多重区域模式": "Многорегиональная модель"
|
||||
"多重区域模式": "Многорегиональная модель",
|
||||
"记忆选定区域": "Запоминание выбранной области",
|
||||
"关闭": "Закрыть"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "ใช้แบบจำลองภาษาญี่ปุ่นแทนอาจไม่ได้ผล",
|
||||
"保持非重复字符": "เก็บอักขระที่ไม่ซ้ำกัน",
|
||||
"选择文本窗口中文本框只读": "เลือกกล่องข้อความในหน้าต่างข้อความ อ่านอย่างเดียว",
|
||||
"多重区域模式": "โหมดหลายโซน"
|
||||
"多重区域模式": "โหมดหลายโซน",
|
||||
"记忆选定区域": "หน่วยความจำพื้นที่ที่เลือก",
|
||||
"关闭": "ปิด"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "Japon modellerini yerine koymak etkili olmayabilir.",
|
||||
"保持非重复字符": "Tekrarlamayan karakterleri tut",
|
||||
"选择文本窗口中文本框只读": "Metin penceresindeki sadece okuyulmuş metin kutularını seçin",
|
||||
"多重区域模式": "Çok bölge modu"
|
||||
"多重区域模式": "Çok bölge modu",
|
||||
"记忆选定区域": "Hafıza seçim alanı",
|
||||
"关闭": "kapat"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "Використання японських моделей як заміни може бути неефективним",
|
||||
"保持非重复字符": "Зберегти символи, які не повторюються",
|
||||
"选择文本窗口中文本框只读": "Виберіть текстові поля для лише читання у текстовому вікні",
|
||||
"多重区域模式": "Режим декількох регіонів"
|
||||
"多重区域模式": "Режим декількох регіонів",
|
||||
"记忆选定区域": "Область вибору пам' яті",
|
||||
"关闭": "закрити"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "Các mô hình tiếng Nhật đang được sử dụng thay thế và có thể không hiệu quả",
|
||||
"保持非重复字符": "Giữ các ký tự không trùng lặp",
|
||||
"选择文本窗口中文本框只读": "Chọn hộp văn bản chỉ đọc trong cửa sổ văn bản",
|
||||
"多重区域模式": "Chế độ đa vùng"
|
||||
"多重区域模式": "Chế độ đa vùng",
|
||||
"记忆选定区域": "Ghi nhớ vùng chọn",
|
||||
"关闭": "Đóng cửa"
|
||||
}
|
@ -708,5 +708,7 @@
|
||||
"正在使用日语模型作为代替,可能效果不佳": "",
|
||||
"保持非重复字符": "",
|
||||
"选择文本窗口中文本框只读": "",
|
||||
"多重区域模式": ""
|
||||
"多重区域模式": "",
|
||||
"记忆选定区域": "",
|
||||
"关闭": ""
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user