mirror of
https://github.com/HIllya51/LunaTranslator.git
synced 2024-12-28 08:04:13 +08:00
many
This commit is contained in:
parent
0cd736be4e
commit
4b37f8194f
@ -1,5 +1,5 @@
|
||||
import time
|
||||
import os, threading
|
||||
import os, threading, sys
|
||||
from qtsymbols import *
|
||||
from traceback import print_exc
|
||||
from myutils.config import (
|
||||
@ -22,16 +22,16 @@ from myutils.utils import (
|
||||
)
|
||||
from myutils.wrapper import threader
|
||||
from gui.showword import searchwordW
|
||||
from myutils.hwnd import getpidexe, ListProcess
|
||||
from myutils.hwnd import getpidexe, ListProcess, getExeIcon
|
||||
from textsource.copyboard import copyboard
|
||||
from textsource.texthook import texthook
|
||||
from textsource.ocrtext import ocrtext
|
||||
import gui.selecthook
|
||||
import gui.translatorUI
|
||||
from gui.selecthook import hookselect
|
||||
from gui.translatorUI import QUnFrameWindow
|
||||
from gui.languageset import languageset
|
||||
import zhconv, functools
|
||||
import gui.transhist
|
||||
import gui.edittext
|
||||
from gui.transhist import transhist
|
||||
from gui.edittext import edittext
|
||||
import importlib, qtawesome
|
||||
from functools import partial
|
||||
from gui.settin import Settin
|
||||
@ -44,6 +44,14 @@ from winsharedutils import pid_running, isDark
|
||||
from myutils.post import POSTSOLVE
|
||||
|
||||
|
||||
class commonstylebase(QWidget):
|
||||
setstylesheetsignal = pyqtSignal()
|
||||
|
||||
def __init__(self, parent) -> None:
|
||||
super().__init__(parent)
|
||||
self.setstylesheetsignal.connect(gobject.baseobject.setcommonstylesheet)
|
||||
|
||||
|
||||
class MAINUI:
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
@ -54,6 +62,7 @@ class MAINUI:
|
||||
self.textsource_p = None
|
||||
self.currentmd5 = "0"
|
||||
self.currenttext = ""
|
||||
self.currenttranslate = ""
|
||||
self.currentread = ""
|
||||
self.refresh_on_get_trans_signature = 0
|
||||
self.currentsignature = None
|
||||
@ -62,6 +71,12 @@ class MAINUI:
|
||||
self.outputers = {}
|
||||
self.processmethods = []
|
||||
self.zhanweifu = 0
|
||||
self.showocrimage = None
|
||||
self.showocrimage_cached = None
|
||||
self.AttachProcessDialog = None
|
||||
self.edittextui = None
|
||||
self.edittextui_cached = None
|
||||
self.edittextui_sync=True
|
||||
|
||||
@property
|
||||
def textsource(self):
|
||||
@ -366,7 +381,7 @@ class MAINUI:
|
||||
self.textsource.sqlqueueput((contentraw, classname, res))
|
||||
except:
|
||||
pass
|
||||
|
||||
self.currenttranslate = res
|
||||
if (
|
||||
globalconfig["embedded"]["as_fast_as_posible"]
|
||||
or classname == globalconfig["embedded"]["translator_2"]
|
||||
@ -456,12 +471,15 @@ class MAINUI:
|
||||
def starttextsource(self, use=None, checked=True):
|
||||
self.translation_ui.showhidestate = False
|
||||
self.translation_ui.refreshtooliconsignal.emit()
|
||||
self.settin_ui.selectbutton.setEnabled(
|
||||
globalconfig["sourcestatus2"]["texthook"]["use"]
|
||||
)
|
||||
self.settin_ui.selecthookbutton.setEnabled(
|
||||
globalconfig["sourcestatus2"]["texthook"]["use"]
|
||||
)
|
||||
try:
|
||||
self.settin_ui.selectbutton.setEnabled(
|
||||
globalconfig["sourcestatus2"]["texthook"]["use"]
|
||||
)
|
||||
self.settin_ui.selecthookbutton.setEnabled(
|
||||
globalconfig["sourcestatus2"]["texthook"]["use"]
|
||||
)
|
||||
except:
|
||||
pass
|
||||
self.textsource = None
|
||||
if checked:
|
||||
classes = {"ocr": ocrtext, "copy": copyboard, "texthook": None}
|
||||
@ -589,11 +607,39 @@ class MAINUI:
|
||||
|
||||
return aclass(type_)
|
||||
|
||||
def maybesetimage(self, pair):
|
||||
|
||||
if self.showocrimage:
|
||||
self.showocrimage.setimage.emit(pair)
|
||||
self.showocrimage_cached = pair
|
||||
|
||||
def createshowocrimage(self):
|
||||
self.showocrimage = showocrimage(self.settin_ui, self.showocrimage_cached)
|
||||
if self.showocrimage:
|
||||
self.showocrimage.show()
|
||||
|
||||
def maybesetedittext(self, text):
|
||||
if self.edittextui:
|
||||
self.edittextui.getnewsentencesignal.emit(text)
|
||||
self.edittextui_cached = text
|
||||
|
||||
def createedittextui(self):
|
||||
self.edittextui = edittext(self.settin_ui, self.edittextui_cached)
|
||||
if self.edittextui:
|
||||
self.edittextui.show()
|
||||
|
||||
def createattachprocess(self):
|
||||
self.AttachProcessDialog = AttachProcessDialog(
|
||||
self.settin_ui, self.selectprocess, self.hookselectdialog
|
||||
)
|
||||
if self.AttachProcessDialog:
|
||||
self.AttachProcessDialog.show()
|
||||
|
||||
def onwindowloadautohook(self):
|
||||
textsourceusing = globalconfig["sourcestatus2"]["texthook"]["use"]
|
||||
if not (globalconfig["autostarthook"] and textsourceusing):
|
||||
return
|
||||
elif self.AttachProcessDialog.isVisible():
|
||||
elif self.AttachProcessDialog and self.AttachProcessDialog.isVisible():
|
||||
return
|
||||
else:
|
||||
try:
|
||||
@ -631,9 +677,14 @@ class MAINUI:
|
||||
"onloadautoswitchsrclang"
|
||||
]
|
||||
if onloadautoswitchsrclang > 0:
|
||||
self.settin_ui.srclangswitcher.setCurrentIndex(
|
||||
onloadautoswitchsrclang - 1
|
||||
)
|
||||
try:
|
||||
self.settin_ui.srclangswitcher.setCurrentIndex(
|
||||
onloadautoswitchsrclang - 1
|
||||
)
|
||||
except:
|
||||
globalconfig["srclang3"] = (
|
||||
onloadautoswitchsrclang - 1
|
||||
)
|
||||
break
|
||||
|
||||
else:
|
||||
@ -727,32 +778,6 @@ class MAINUI:
|
||||
int(widget.winId()), dark, globalconfig["WindowBackdrop"]
|
||||
)
|
||||
|
||||
def aa(self):
|
||||
class WindowEventFilter(QObject):
|
||||
def eventFilter(_, obj, event):
|
||||
if event.type() == QEvent.Type.WinIdChange:
|
||||
|
||||
hwnd = obj.winId()
|
||||
if hwnd: # window create/destroy,when destroy winId is None
|
||||
if self.currentisdark is not None:
|
||||
self.setdarktheme(obj, self.currentisdark)
|
||||
windows.SetProp(
|
||||
int(obj.winId()),
|
||||
"Magpie.WindowType.ToolWindow",
|
||||
windows.HANDLE(1),
|
||||
)
|
||||
self.setshowintab_checked(obj)
|
||||
return False
|
||||
|
||||
self.currentisdark = None
|
||||
self.__filter = WindowEventFilter() # keep ref
|
||||
QApplication.instance().installEventFilter(self.__filter)
|
||||
|
||||
self.translation_ui = gui.translatorUI.QUnFrameWindow()
|
||||
|
||||
self.translation_ui.show()
|
||||
self.mainuiloadafter()
|
||||
|
||||
def checkgameplayingthread(self):
|
||||
self.tracestarted = False
|
||||
while True:
|
||||
@ -839,7 +864,18 @@ class MAINUI:
|
||||
trayMenu.addAction(settingAction)
|
||||
trayMenu.addSeparator()
|
||||
trayMenu.addAction(quitAction)
|
||||
self.translation_ui.tray.setContextMenu(trayMenu)
|
||||
self.tray = QSystemTrayIcon()
|
||||
|
||||
icon = getExeIcon(sys.argv[0]) #'./LunaTranslator.exe')# QIcon()
|
||||
self.tray.setIcon(icon)
|
||||
|
||||
self.tray.activated.connect(self.translation_ui.leftclicktray)
|
||||
self.tray.show()
|
||||
self.tray.setContextMenu(trayMenu)
|
||||
|
||||
def destroytray(self):
|
||||
self.tray.hide()
|
||||
self.tray = None
|
||||
|
||||
def setshowintab(self):
|
||||
for widget in QApplication.topLevelWidgets():
|
||||
@ -885,28 +921,28 @@ class MAINUI:
|
||||
+ (globalconfig["settingfonttype"])
|
||||
+ "' ; }"
|
||||
)
|
||||
self.settin_ui.setStyleSheet(style)
|
||||
self.__commonstylebase.setStyleSheet(style)
|
||||
|
||||
def loadui(self):
|
||||
self.installeventfillter()
|
||||
self.translation_ui = QUnFrameWindow()
|
||||
self.translation_ui.show()
|
||||
self.translation_ui.aftershowdosomething()
|
||||
self.mainuiloadafter()
|
||||
|
||||
def mainuiloadafter(self):
|
||||
self.setshowintab()
|
||||
self.safeloadprocessmodels()
|
||||
self.prepare()
|
||||
self.startxiaoxueguan()
|
||||
self.starthira()
|
||||
self.startoutputer()
|
||||
self.settin_ui = Settin(self.translation_ui)
|
||||
self.inittray()
|
||||
self.__commonstylebase = commonstylebase(self.translation_ui)
|
||||
self.setcommonstylesheet()
|
||||
self.transhis = gui.transhist.transhist(self.settin_ui)
|
||||
self.settin_ui = Settin(self.__commonstylebase)
|
||||
self.transhis = transhist(self.settin_ui)
|
||||
self.startreader()
|
||||
|
||||
self.edittextui = gui.edittext.edittext(self.settin_ui)
|
||||
self.searchwordW = searchwordW(self.settin_ui)
|
||||
self.hookselectdialog = gui.selecthook.hookselect(self.settin_ui)
|
||||
self.showocrimage = showocrimage(self.settin_ui)
|
||||
self.AttachProcessDialog = AttachProcessDialog(
|
||||
self.settin_ui, self.selectprocess, self.hookselectdialog
|
||||
)
|
||||
self.hookselectdialog = hookselect(self.settin_ui)
|
||||
self.starttextsource()
|
||||
threading.Thread(target=self.autocheckhwndexists).start()
|
||||
threading.Thread(target=self.autohookmonitorthread).start()
|
||||
@ -914,6 +950,38 @@ class MAINUI:
|
||||
target=minmaxmoveobservefunc, args=(self.translation_ui,)
|
||||
).start()
|
||||
threading.Thread(target=self.checkgameplayingthread).start()
|
||||
threading.Thread(target=self.darklistener).start()
|
||||
self.inittray()
|
||||
|
||||
def darklistener(self):
|
||||
sema = winsharedutils.startdarklistener()
|
||||
while True:
|
||||
# 会触发两次
|
||||
windows.WaitForSingleObject(sema, windows.INFINITE)
|
||||
if globalconfig["darklight"] == 2:
|
||||
self.__commonstylebase.setstylesheetsignal.emit()
|
||||
windows.WaitForSingleObject(sema, windows.INFINITE)
|
||||
|
||||
def installeventfillter(self):
|
||||
class WindowEventFilter(QObject):
|
||||
def eventFilter(_, obj, event):
|
||||
if event.type() == QEvent.Type.WinIdChange:
|
||||
|
||||
hwnd = obj.winId()
|
||||
if hwnd: # window create/destroy,when destroy winId is None
|
||||
if self.currentisdark is not None:
|
||||
self.setdarktheme(obj, self.currentisdark)
|
||||
windows.SetProp(
|
||||
int(obj.winId()),
|
||||
"Magpie.WindowType.ToolWindow",
|
||||
windows.HANDLE(1),
|
||||
)
|
||||
self.setshowintab_checked(obj)
|
||||
return False
|
||||
|
||||
self.currentisdark = None
|
||||
self.__filter = WindowEventFilter() # keep ref
|
||||
QApplication.instance().installEventFilter(self.__filter)
|
||||
|
||||
def checklang(self):
|
||||
if globalconfig["language_setted_2.4.5"] == False:
|
||||
|
@ -1,5 +1,5 @@
|
||||
import sys, windows
|
||||
import platform, os
|
||||
import platform, os, time
|
||||
|
||||
if __name__ == "__main__":
|
||||
_lock = windows.AutoHandle(windows.CreateMutex(False, "LUNA_UPDATER_BLOCK"))
|
||||
@ -18,8 +18,6 @@ if __name__ == "__main__":
|
||||
0, "./LunaTranslator/network/" + ["winhttp", "libcurl"][globalconfig["network"]]
|
||||
)
|
||||
|
||||
from gui.usefulwidget import getQMessageBox
|
||||
from LunaTranslator import MAINUI
|
||||
import gobject
|
||||
|
||||
gobject.overridepathexists()
|
||||
@ -60,6 +58,8 @@ if __name__ == "__main__":
|
||||
if os.path.exists(f) == False:
|
||||
collect.append(f)
|
||||
if len(collect):
|
||||
from gui.usefulwidget import getQMessageBox
|
||||
|
||||
getQMessageBox(
|
||||
None,
|
||||
_TR("错误"),
|
||||
@ -72,7 +72,9 @@ if __name__ == "__main__":
|
||||
)
|
||||
os._exit(0)
|
||||
|
||||
from LunaTranslator import MAINUI
|
||||
|
||||
gobject.baseobject = MAINUI()
|
||||
gobject.baseobject.checklang()
|
||||
gobject.baseobject.aa()
|
||||
gobject.baseobject.loadui()
|
||||
app.exit(app.exec())
|
||||
|
@ -3,7 +3,8 @@ from winsharedutils import getpidhwndfirst
|
||||
import functools
|
||||
from myutils.config import globalconfig, _TR
|
||||
import windows
|
||||
import os
|
||||
import os, gobject
|
||||
from myutils.wrapper import Singleton_close
|
||||
from myutils.hwnd import (
|
||||
getpidexe,
|
||||
ListProcess,
|
||||
@ -12,10 +13,11 @@ from myutils.hwnd import (
|
||||
)
|
||||
import qtawesome
|
||||
|
||||
from gui.usefulwidget import closeashidewindow, getQMessageBox
|
||||
from gui.usefulwidget import saveposwindow, getQMessageBox
|
||||
|
||||
|
||||
class AttachProcessDialog(closeashidewindow):
|
||||
@Singleton_close
|
||||
class AttachProcessDialog(saveposwindow):
|
||||
|
||||
setcurrentpidpnamesignal = pyqtSignal(int, int)
|
||||
|
||||
@ -37,10 +39,12 @@ class AttachProcessDialog(closeashidewindow):
|
||||
self.windowtext.setText(windows.GetWindowText(hwnd))
|
||||
self.selectedp = (_pids, name, hwnd)
|
||||
|
||||
def closeEvent(self, e):
|
||||
gobject.baseobject.AttachProcessDialog = None
|
||||
super().closeEvent(e)
|
||||
|
||||
def __init__(self, parent, callback, hookselectdialog=None):
|
||||
super(AttachProcessDialog, self).__init__(
|
||||
parent, globalconfig, "attachprocessgeo"
|
||||
)
|
||||
super().__init__(parent, globalconfig, "attachprocessgeo")
|
||||
self.setcurrentpidpnamesignal.connect(self.selectwindowcallback)
|
||||
|
||||
self.iconcache = {}
|
||||
|
@ -473,7 +473,8 @@ class browserdialog(saveposwindow):
|
||||
|
||||
def __init__(self, parent, exepath=None) -> None:
|
||||
super().__init__(parent, globalconfig, "browserwidget")
|
||||
|
||||
if exepath:
|
||||
self.setWindowIcon(getExeIcon(exepath, cache=True))
|
||||
self.browser = auto_select_webview(self)
|
||||
|
||||
self.tagswidget = TagWidget(self)
|
||||
|
@ -3,22 +3,28 @@ import qtawesome
|
||||
import threading, windows
|
||||
import gobject, time
|
||||
from myutils.config import globalconfig, _TR, _TRL
|
||||
from gui.usefulwidget import closeashidewindow, getsimplecombobox
|
||||
from gui.usefulwidget import saveposwindow, getsimplecombobox
|
||||
from myutils.utils import str2rgba
|
||||
from myutils.wrapper import Singleton_close, threader
|
||||
|
||||
|
||||
class edittext(closeashidewindow):
|
||||
@Singleton_close
|
||||
class edittext(saveposwindow):
|
||||
getnewsentencesignal = pyqtSignal(str)
|
||||
|
||||
def __init__(self, parent):
|
||||
super(edittext, self).__init__(parent, globalconfig, "edit_geo")
|
||||
self.sync = True
|
||||
def closeEvent(self, e):
|
||||
gobject.baseobject.edittextui = None
|
||||
super().closeEvent(e)
|
||||
|
||||
def __init__(self, parent, cached):
|
||||
super().__init__(parent, globalconfig, "edit_geo")
|
||||
self.setupUi()
|
||||
|
||||
# self.setWindowFlags(self.windowFlags()&~Qt.WindowMinimizeButtonHint)
|
||||
self.getnewsentencesignal.connect(self.getnewsentence)
|
||||
self.setWindowTitle(_TR("编辑"))
|
||||
if cached:
|
||||
self.getnewsentence(cached)
|
||||
|
||||
def setupUi(self):
|
||||
self.setWindowIcon(qtawesome.icon("fa.edit"))
|
||||
@ -43,8 +49,12 @@ class edittext(closeashidewindow):
|
||||
)
|
||||
bt2 = QPushButton(
|
||||
icon=qtawesome.icon(
|
||||
"fa.forward" if self.sync else "fa.play",
|
||||
color="#FF69B4" if self.sync else globalconfig["buttoncolor"],
|
||||
"fa.forward" if gobject.baseobject.edittextui_sync else "fa.play",
|
||||
color=(
|
||||
"#FF69B4"
|
||||
if gobject.baseobject.edittextui_sync
|
||||
else globalconfig["buttoncolor"]
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
@ -66,11 +76,15 @@ class edittext(closeashidewindow):
|
||||
).start()
|
||||
|
||||
def changestate(self):
|
||||
self.sync = not self.sync
|
||||
gobject.baseobject.edittextui_sync = not gobject.baseobject.edittextui_sync
|
||||
self.bt2.setIcon(
|
||||
qtawesome.icon(
|
||||
"fa.forward" if self.sync else "fa.play",
|
||||
color="#FF69B4" if self.sync else globalconfig["buttoncolor"],
|
||||
"fa.forward" if gobject.baseobject.edittextui_sync else "fa.play",
|
||||
color=(
|
||||
"#FF69B4"
|
||||
if gobject.baseobject.edittextui_sync
|
||||
else globalconfig["buttoncolor"]
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
@ -83,7 +97,7 @@ class edittext(closeashidewindow):
|
||||
self.textOutput.clear()
|
||||
|
||||
def getnewsentence(self, sentence):
|
||||
if self.sync:
|
||||
if gobject.baseobject.edittextui_sync:
|
||||
self.textOutput.setPlainText(sentence)
|
||||
|
||||
|
||||
|
171
LunaTranslator/LunaTranslator/gui/gui_xianshi_buttons.py
Normal file
171
LunaTranslator/LunaTranslator/gui/gui_xianshi_buttons.py
Normal file
@ -0,0 +1,171 @@
|
||||
import functools
|
||||
from qtsymbols import *
|
||||
from myutils.config import globalconfig, _TR, _TRL
|
||||
from myutils.wrapper import Singleton
|
||||
import qtawesome, gobject, json
|
||||
from gui.usefulwidget import (
|
||||
D_getsimplecombobox,
|
||||
D_getcolorbutton,
|
||||
getcolorbutton,
|
||||
makescrollgrid,
|
||||
D_getsimpleswitch,
|
||||
)
|
||||
|
||||
|
||||
@Singleton
|
||||
class dialog_selecticon(QDialog):
|
||||
def __init__(self, parent, dict, key, _nouse_for_click_arg) -> None:
|
||||
|
||||
super().__init__(parent, Qt.WindowType.WindowCloseButtonHint)
|
||||
self.dict = dict
|
||||
self.key = key
|
||||
self.setWindowTitle(_TR("选择图标"))
|
||||
with open(
|
||||
"./files/fonts/fontawesome4.7-webfont-charmap.json", "r", encoding="utf8"
|
||||
) as ff:
|
||||
js = json.load(ff)
|
||||
|
||||
layout = QGridLayout()
|
||||
self.setLayout(layout)
|
||||
for i, name in enumerate(js):
|
||||
layout.addWidget(
|
||||
getcolorbutton(
|
||||
"",
|
||||
"",
|
||||
functools.partial(self.selectcallback, "fa." + name),
|
||||
qicon=qtawesome.icon(
|
||||
"fa." + name, color=globalconfig["buttoncolor"]
|
||||
),
|
||||
),
|
||||
i // 30,
|
||||
i % 30,
|
||||
)
|
||||
self.show()
|
||||
|
||||
def selectcallback(self, _):
|
||||
print(_)
|
||||
self.dict[self.key] = _
|
||||
self.close()
|
||||
|
||||
|
||||
def doadjust():
|
||||
gobject.baseobject.translation_ui.enterfunction(delay=3)
|
||||
gobject.baseobject.translation_ui.adjustbuttons()
|
||||
|
||||
|
||||
def changerank(item, up, sortlist, savelist, savelay):
|
||||
|
||||
idx = sortlist.index(item)
|
||||
idx2 = idx + (-1 if up else 1)
|
||||
if idx2 < 0 or idx2 >= len(sortlist):
|
||||
return
|
||||
headoffset = 1
|
||||
idx2 = idx + (-1 if up else 1)
|
||||
sortlist[idx], sortlist[idx2] = sortlist[idx2], sortlist[idx]
|
||||
for i, ww in enumerate(savelist[idx + headoffset]):
|
||||
|
||||
w1 = savelay[0].indexOf(ww)
|
||||
w2 = savelay[0].indexOf(savelist[idx2 + headoffset][i])
|
||||
p1 = savelay[0].getItemPosition(w1)
|
||||
p2 = savelay[0].getItemPosition(w2)
|
||||
savelay[0].removeWidget(ww)
|
||||
savelay[0].removeWidget(savelist[idx2 + headoffset][i])
|
||||
|
||||
savelay[0].addWidget(savelist[idx2 + headoffset][i], *p1)
|
||||
savelay[0].addWidget(ww, *p2)
|
||||
savelist[idx + headoffset], savelist[idx2 + headoffset] = (
|
||||
savelist[idx2 + headoffset],
|
||||
savelist[idx + headoffset],
|
||||
)
|
||||
doadjust()
|
||||
|
||||
|
||||
def createbuttonwidget(self, lay):
|
||||
# return table
|
||||
grids = [["显示", "", "", "对齐", "图标", "图标2", "说明"]]
|
||||
sortlist = globalconfig["toolbutton"]["rank2"]
|
||||
savelist = []
|
||||
savelay = []
|
||||
|
||||
for i, k in enumerate(sortlist):
|
||||
|
||||
button_up = D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=functools.partial(
|
||||
changerank, k, True, sortlist, savelist, savelay
|
||||
),
|
||||
icon="fa.arrow-up",
|
||||
constcolor="#FF69B4",
|
||||
)
|
||||
button_down = D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=functools.partial(
|
||||
changerank, k, False, sortlist, savelist, savelay
|
||||
),
|
||||
icon="fa.arrow-down",
|
||||
constcolor="#FF69B4",
|
||||
)
|
||||
|
||||
l = [
|
||||
D_getsimpleswitch(
|
||||
globalconfig["toolbutton"]["buttons"][k],
|
||||
"use",
|
||||
callback=lambda _: doadjust(),
|
||||
),
|
||||
button_up,
|
||||
button_down,
|
||||
D_getsimplecombobox(
|
||||
_TRL(["居左", "居右", "居中"]),
|
||||
globalconfig["toolbutton"]["buttons"][k],
|
||||
"align",
|
||||
callback=lambda _: doadjust(),
|
||||
fixedsize=True,
|
||||
),
|
||||
D_getcolorbutton(
|
||||
"",
|
||||
"",
|
||||
functools.partial(
|
||||
dialog_selecticon,
|
||||
self,
|
||||
globalconfig["toolbutton"]["buttons"][k],
|
||||
"icon",
|
||||
),
|
||||
qicon=qtawesome.icon(
|
||||
globalconfig["toolbutton"]["buttons"][k]["icon"],
|
||||
color=globalconfig["buttoncolor"],
|
||||
),
|
||||
),
|
||||
]
|
||||
if "icon2" in globalconfig["toolbutton"]["buttons"][k]:
|
||||
l.append(
|
||||
D_getcolorbutton(
|
||||
"",
|
||||
"",
|
||||
functools.partial(
|
||||
dialog_selecticon,
|
||||
self,
|
||||
globalconfig["toolbutton"]["buttons"][k],
|
||||
"icon2",
|
||||
),
|
||||
qicon=qtawesome.icon(
|
||||
globalconfig["toolbutton"]["buttons"][k]["icon2"],
|
||||
color=globalconfig["buttoncolor"],
|
||||
),
|
||||
),
|
||||
)
|
||||
else:
|
||||
l.append("")
|
||||
if "belong" in globalconfig["toolbutton"]["buttons"][k]:
|
||||
belong = (
|
||||
"_"
|
||||
+ "仅"
|
||||
+ "_"
|
||||
+ " ".join(globalconfig["toolbutton"]["buttons"][k]["belong"])
|
||||
)
|
||||
else:
|
||||
belong = ""
|
||||
l.append(globalconfig["toolbutton"]["buttons"][k]["tip"] + belong)
|
||||
grids.append(l)
|
||||
makescrollgrid(grids, lay, True, savelist, savelay)
|
327
LunaTranslator/LunaTranslator/gui/gui_xianshi_scale.py
Normal file
327
LunaTranslator/LunaTranslator/gui/gui_xianshi_scale.py
Normal file
@ -0,0 +1,327 @@
|
||||
import functools
|
||||
from qtsymbols import *
|
||||
from myutils.config import globalconfig, magpie_config, static_data
|
||||
from gui.inputdialog import getsomepath1
|
||||
from gui.usefulwidget import (
|
||||
D_getsimplecombobox,
|
||||
makegrid,
|
||||
D_getspinbox,
|
||||
getvboxwidget,
|
||||
D_getcolorbutton,
|
||||
makesubtab_lazy,
|
||||
makescrollgrid,
|
||||
D_getsimpleswitch,
|
||||
)
|
||||
|
||||
|
||||
def makescalew(self, lay):
|
||||
|
||||
commonfsgrid = [
|
||||
[
|
||||
("缩放方式", 4),
|
||||
(
|
||||
D_getsimplecombobox(
|
||||
static_data["scalemethods_vis"],
|
||||
globalconfig,
|
||||
"fullscreenmethod_4",
|
||||
),
|
||||
6,
|
||||
),
|
||||
]
|
||||
]
|
||||
|
||||
losslessgrid = [
|
||||
[
|
||||
("Magpie_路径", 4),
|
||||
(
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=lambda x: getsomepath1(
|
||||
self,
|
||||
"Magpie_路径",
|
||||
globalconfig,
|
||||
"magpiepath",
|
||||
"Magpie_路径",
|
||||
isdir=True,
|
||||
),
|
||||
icon="fa.gear",
|
||||
constcolor="#FF69B4",
|
||||
),
|
||||
1,
|
||||
),
|
||||
],
|
||||
[
|
||||
("Hook Magpie进程使其不会退出缩放", 4),
|
||||
D_getsimpleswitch(globalconfig, "hookmagpie"),
|
||||
],
|
||||
]
|
||||
|
||||
innermagpie = [
|
||||
[("常规", -1)],
|
||||
[
|
||||
("", 1),
|
||||
("缩放模式", 4),
|
||||
(
|
||||
D_getsimplecombobox(
|
||||
[_["name"] for _ in magpie_config["scalingModes"]],
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"scalingMode",
|
||||
),
|
||||
6,
|
||||
),
|
||||
"",
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("捕获模式", 4),
|
||||
(
|
||||
D_getsimplecombobox(
|
||||
[
|
||||
"Graphics Capture",
|
||||
"Desktop Duplication",
|
||||
"GDI",
|
||||
"DwmSharedSurface",
|
||||
],
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"captureMethod",
|
||||
),
|
||||
6,
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("3D游戏模式", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"3DGameMode",
|
||||
)
|
||||
),
|
||||
],
|
||||
[("性能", -1)],
|
||||
[
|
||||
("", 1),
|
||||
("显示帧率", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"showFPS",
|
||||
)
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("限制帧率", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"frameRateLimiterEnabled",
|
||||
)
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("最大帧率", 4),
|
||||
(
|
||||
D_getspinbox(
|
||||
0,
|
||||
9999,
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"maxFrameRate",
|
||||
),
|
||||
2,
|
||||
),
|
||||
],
|
||||
[("源窗口", -1)],
|
||||
[
|
||||
("", 1),
|
||||
("缩放时禁用窗口大小调整", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"disableWindowResizing",
|
||||
)
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("捕获标题栏", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"captureTitleBar",
|
||||
)
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("自定义剪裁", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"croppingEnabled",
|
||||
)
|
||||
),
|
||||
],
|
||||
[("光标", -1)],
|
||||
[
|
||||
("", 1),
|
||||
("绘制光标", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"drawCursor",
|
||||
)
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("绘制光标_缩放系数", 4),
|
||||
(
|
||||
D_getsimplecombobox(
|
||||
["0.5x", "0.75x", "无缩放", "1.25x", "1.5x", "2x", "和源窗口相同"],
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"cursorScaling",
|
||||
),
|
||||
6,
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("绘制光标_插值算法", 4),
|
||||
(
|
||||
D_getsimplecombobox(
|
||||
["最邻近", "双线性"],
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"cursorInterpolationMode",
|
||||
),
|
||||
6,
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("缩放时调整光标速度", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"adjustCursorSpeed",
|
||||
)
|
||||
),
|
||||
],
|
||||
[("高级", -1)],
|
||||
[
|
||||
("", 1),
|
||||
("禁用DirectFlip", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config["profiles"][globalconfig["profiles_index"]],
|
||||
"disableDirectFlip",
|
||||
)
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("允许缩放最大化或全屏的窗口", 4),
|
||||
(D_getsimpleswitch(magpie_config, "allowScalingMaximized")),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("缩放时模拟独占全屏", 4),
|
||||
(D_getsimpleswitch(magpie_config, "simulateExclusiveFullscreen")),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("内联效果参数", 4),
|
||||
(D_getsimpleswitch(magpie_config, "inlineParams")),
|
||||
],
|
||||
[("开发者选项", -1)],
|
||||
[
|
||||
("", 1),
|
||||
("调试模式", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config,
|
||||
"debugMode",
|
||||
)
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("禁用效果缓存", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config,
|
||||
"disableEffectCache",
|
||||
)
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("禁用字体缓存", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config,
|
||||
"disableFontCache",
|
||||
)
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("解析效果时保存源代码", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config,
|
||||
"saveEffectSources",
|
||||
)
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("编译效果时将警告视为错误", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config,
|
||||
"warningsAreErrors",
|
||||
)
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("检测重复帧", 4),
|
||||
(
|
||||
D_getsimplecombobox(
|
||||
["总是检测", "动态检测", "从不检测"],
|
||||
magpie_config,
|
||||
"duplicateFrameDetectionMode",
|
||||
),
|
||||
6,
|
||||
),
|
||||
],
|
||||
[
|
||||
("", 1),
|
||||
("启用动态检测统计", 4),
|
||||
(
|
||||
D_getsimpleswitch(
|
||||
magpie_config,
|
||||
"enableStatisticsForDynamicDetection",
|
||||
)
|
||||
),
|
||||
],
|
||||
]
|
||||
|
||||
vw, vl = getvboxwidget()
|
||||
lay.addWidget(vw)
|
||||
gw, gd = makegrid(commonfsgrid, delay=True)
|
||||
vl.addWidget(gw)
|
||||
tw, td = makesubtab_lazy(
|
||||
["Magpie", "外部缩放软件"],
|
||||
[
|
||||
functools.partial(makescrollgrid, innermagpie),
|
||||
functools.partial(makescrollgrid, losslessgrid),
|
||||
],
|
||||
delay=True,
|
||||
)
|
||||
vl.addWidget(tw)
|
||||
gd()
|
||||
td()
|
231
LunaTranslator/LunaTranslator/gui/gui_xianshi_text.py
Normal file
231
LunaTranslator/LunaTranslator/gui/gui_xianshi_text.py
Normal file
@ -0,0 +1,231 @@
|
||||
import functools
|
||||
from qtsymbols import *
|
||||
from gui.inputdialog import multicolorset
|
||||
from myutils.config import globalconfig, _TRL
|
||||
import gobject
|
||||
from gui.usefulwidget import (
|
||||
D_getsimplecombobox,
|
||||
getsimpleswitch,
|
||||
D_getspinbox,
|
||||
getspinbox,
|
||||
D_getcolorbutton,
|
||||
D_getsimpleswitch,
|
||||
selectcolor,
|
||||
)
|
||||
|
||||
|
||||
def maybehavefontsizespin(self, t):
|
||||
if "fontSize_spinBox" in dir(self):
|
||||
self.fontSize_spinBox.setValue(self.fontSize_spinBox.value() + 0.5 * t)
|
||||
else:
|
||||
globalconfig["fontsize"] += 0.5 * t
|
||||
|
||||
|
||||
def createfontsizespin(self):
|
||||
self.fontSize_spinBox = getspinbox(
|
||||
1, 100, globalconfig, "fontsize", double=True, step=0.1
|
||||
)
|
||||
return self.fontSize_spinBox
|
||||
|
||||
|
||||
def __changeuibuttonstate(self, x):
|
||||
gobject.baseobject.translation_ui.refreshtoolicon()
|
||||
try:
|
||||
self.show_hira_switch.setEnabled(x)
|
||||
self.show_fenciswitch.setEnabled(x)
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
def createtextfontcom(key):
|
||||
font_comboBox = QFontComboBox()
|
||||
font_comboBox.currentTextChanged.connect(lambda x: globalconfig.__setitem__(key, x))
|
||||
font_comboBox.setCurrentFont(QFont(globalconfig[key]))
|
||||
return font_comboBox
|
||||
|
||||
|
||||
def createshoworiginswitch(self):
|
||||
self.show_original_switch = getsimpleswitch(
|
||||
globalconfig, "isshowrawtext", callback=lambda x: __changeuibuttonstate(self, x)
|
||||
)
|
||||
return self.show_original_switch
|
||||
|
||||
|
||||
def createhiraswitch(self):
|
||||
|
||||
self.show_hira_switch = getsimpleswitch(
|
||||
globalconfig, "isshowhira", enable=globalconfig["isshowrawtext"]
|
||||
)
|
||||
return self.show_hira_switch
|
||||
|
||||
|
||||
def createfenciwitch(self):
|
||||
self.show_fenciswitch = getsimpleswitch(
|
||||
globalconfig, "show_fenci", enable=globalconfig["isshowrawtext"]
|
||||
)
|
||||
return self.show_fenciswitch
|
||||
|
||||
|
||||
def xianshigrid(self):
|
||||
|
||||
textgrid = [
|
||||
[
|
||||
("原文字体", 3),
|
||||
(functools.partial(createtextfontcom, "fonttype"), 6),
|
||||
("", 5),
|
||||
],
|
||||
[
|
||||
("译文字体", 3),
|
||||
(functools.partial(createtextfontcom, "fonttype2"), 6),
|
||||
],
|
||||
[
|
||||
("字体大小", 3),
|
||||
(functools.partial(createfontsizespin, self), 3),
|
||||
"",
|
||||
("额外的行间距", 3),
|
||||
(D_getspinbox(-100, 100, globalconfig, "extra_space"), 3),
|
||||
],
|
||||
[
|
||||
("居中显示", 5),
|
||||
D_getsimpleswitch(globalconfig, "showatcenter"),
|
||||
"",
|
||||
("加粗字体", 5),
|
||||
D_getsimpleswitch(globalconfig, "showbold"),
|
||||
],
|
||||
[
|
||||
"",
|
||||
],
|
||||
[
|
||||
("字体样式", 3),
|
||||
(
|
||||
D_getsimplecombobox(
|
||||
_TRL(
|
||||
[
|
||||
"普通字体",
|
||||
"空心字体",
|
||||
"描边字体",
|
||||
"描边字体_2",
|
||||
"描边字体_2_投影",
|
||||
"发光字体",
|
||||
]
|
||||
),
|
||||
globalconfig,
|
||||
"zitiyangshi2",
|
||||
),
|
||||
6,
|
||||
),
|
||||
],
|
||||
[
|
||||
("特殊字体样式填充颜色", 5),
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"miaobiancolor",
|
||||
transparent=False,
|
||||
callback=lambda: selectcolor(
|
||||
self, globalconfig, "miaobiancolor", self.miaobian_color_button
|
||||
),
|
||||
name="miaobian_color_button",
|
||||
parent=self,
|
||||
),
|
||||
],
|
||||
[
|
||||
("空心线宽", 3),
|
||||
(
|
||||
D_getspinbox(
|
||||
0.1, 100, globalconfig, "miaobianwidth", double=True, step=0.1
|
||||
),
|
||||
3,
|
||||
),
|
||||
"",
|
||||
("描边宽度", 3),
|
||||
(
|
||||
D_getspinbox(
|
||||
0.1, 100, globalconfig, "miaobianwidth2", double=True, step=0.1
|
||||
),
|
||||
3,
|
||||
),
|
||||
],
|
||||
[
|
||||
("发光亮度", 3),
|
||||
(D_getspinbox(1, 100, globalconfig, "shadowforce"), 3),
|
||||
"",
|
||||
("投影距离", 3),
|
||||
(
|
||||
D_getspinbox(
|
||||
0.1, 100, globalconfig, "traceoffset", double=True, step=0.1
|
||||
),
|
||||
3,
|
||||
),
|
||||
],
|
||||
[],
|
||||
[
|
||||
("显示原文", 5),
|
||||
functools.partial(createshoworiginswitch, self),
|
||||
"",
|
||||
("显示翻译", 5),
|
||||
(D_getsimpleswitch(globalconfig, "showfanyi"), 1),
|
||||
],
|
||||
[
|
||||
("原文颜色", 5),
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"rawtextcolor",
|
||||
callback=lambda: selectcolor(
|
||||
self, globalconfig, "rawtextcolor", self.original_color_button
|
||||
),
|
||||
name="original_color_button",
|
||||
parent=self,
|
||||
),
|
||||
"",
|
||||
("显示翻译器名称", 5),
|
||||
(D_getsimpleswitch(globalconfig, "showfanyisource"), 1),
|
||||
],
|
||||
[
|
||||
("最长显示字数", 3),
|
||||
(D_getspinbox(0, 1000000, globalconfig, "maxoriginlength"), 3),
|
||||
],
|
||||
[],
|
||||
[
|
||||
("显示日语注音", 5),
|
||||
functools.partial(createhiraswitch, self),
|
||||
],
|
||||
[
|
||||
("注音颜色", 5),
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"jiamingcolor",
|
||||
callback=lambda: selectcolor(
|
||||
self, globalconfig, "jiamingcolor", self.jiamingcolor_b
|
||||
),
|
||||
name="jiamingcolor_b",
|
||||
parent=self,
|
||||
),
|
||||
"",
|
||||
("注音字体缩放", 3),
|
||||
(
|
||||
D_getspinbox(
|
||||
0.05, 1, globalconfig, "kanarate", double=True, step=0.05, dec=2
|
||||
),
|
||||
3,
|
||||
),
|
||||
],
|
||||
[
|
||||
("语法加亮", 5),
|
||||
functools.partial(createfenciwitch, self),
|
||||
"",
|
||||
("词性颜色(需要Mecab)", 5),
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=lambda: multicolorset(self),
|
||||
icon="fa.gear",
|
||||
constcolor="#FF69B4",
|
||||
),
|
||||
],
|
||||
[],
|
||||
[
|
||||
("收到翻译结果时才刷新", 5),
|
||||
D_getsimpleswitch(globalconfig, "refresh_on_get_trans"),
|
||||
],
|
||||
]
|
||||
return textgrid
|
271
LunaTranslator/LunaTranslator/gui/gui_xianshi_ui.py
Normal file
271
LunaTranslator/LunaTranslator/gui/gui_xianshi_ui.py
Normal file
@ -0,0 +1,271 @@
|
||||
import functools
|
||||
from qtsymbols import *
|
||||
from myutils.config import globalconfig, _TRL, static_data
|
||||
import gobject
|
||||
from gui.usefulwidget import (
|
||||
D_getsimplecombobox,
|
||||
D_getspinbox,
|
||||
D_getcolorbutton,
|
||||
D_getsimpleswitch,
|
||||
selectcolor,
|
||||
)
|
||||
|
||||
|
||||
def changeHorizontal(self):
|
||||
|
||||
globalconfig["transparent"] = self.horizontal_slider.value()
|
||||
try:
|
||||
self.horizontal_slider_label.setText("{}%".format(globalconfig["transparent"]))
|
||||
except:
|
||||
pass
|
||||
#
|
||||
gobject.baseobject.translation_ui.set_color_transparency()
|
||||
|
||||
|
||||
def createhorizontal_slider(self):
|
||||
|
||||
self.horizontal_slider = QSlider()
|
||||
self.horizontal_slider.setMaximum(100)
|
||||
self.horizontal_slider.setMinimum(1)
|
||||
self.horizontal_slider.setOrientation(Qt.Orientation.Horizontal)
|
||||
self.horizontal_slider.setValue(0)
|
||||
self.horizontal_slider.setValue(globalconfig["transparent"])
|
||||
self.horizontal_slider.valueChanged.connect(
|
||||
functools.partial(changeHorizontal, self)
|
||||
)
|
||||
return self.horizontal_slider
|
||||
|
||||
|
||||
def createhorizontal_slider_label(self):
|
||||
self.horizontal_slider_label = QLabel()
|
||||
self.horizontal_slider_label.setText("{}%".format(globalconfig["transparent"]))
|
||||
return self.horizontal_slider_label
|
||||
|
||||
|
||||
def changeHorizontal_tool(self):
|
||||
|
||||
globalconfig["transparent_tool"] = self.horizontal_slider_tool.value()
|
||||
try:
|
||||
self.horizontal_slider_tool_label.setText(
|
||||
"{}%".format(globalconfig["transparent_tool"])
|
||||
)
|
||||
except:
|
||||
pass
|
||||
#
|
||||
gobject.baseobject.translation_ui.set_color_transparency()
|
||||
|
||||
|
||||
def createhorizontal_slider_tool(self):
|
||||
|
||||
self.horizontal_slider_tool = QSlider()
|
||||
self.horizontal_slider_tool.setMaximum(100)
|
||||
self.horizontal_slider_tool.setMinimum(1)
|
||||
self.horizontal_slider_tool.setOrientation(Qt.Orientation.Horizontal)
|
||||
self.horizontal_slider_tool.setValue(0)
|
||||
self.horizontal_slider_tool.setValue(globalconfig["transparent_tool"])
|
||||
self.horizontal_slider_tool.valueChanged.connect(
|
||||
functools.partial(changeHorizontal_tool, self)
|
||||
)
|
||||
return self.horizontal_slider_tool
|
||||
|
||||
|
||||
def createhorizontal_slider_tool_label(self):
|
||||
|
||||
self.horizontal_slider_tool_label = QLabel()
|
||||
self.horizontal_slider_tool_label.setText(
|
||||
"{}%".format(globalconfig["transparent_tool"])
|
||||
)
|
||||
return self.horizontal_slider_tool_label
|
||||
|
||||
|
||||
def createfontcombo():
|
||||
|
||||
sfont_comboBox = QFontComboBox()
|
||||
|
||||
def callback(x):
|
||||
globalconfig.__setitem__("settingfonttype", x)
|
||||
gobject.baseobject.setcommonstylesheet()
|
||||
|
||||
sfont_comboBox.setCurrentFont(QFont(globalconfig["settingfonttype"]))
|
||||
sfont_comboBox.currentTextChanged.connect(callback)
|
||||
return sfont_comboBox
|
||||
|
||||
|
||||
def uisetting(self):
|
||||
|
||||
def themelist(t):
|
||||
return [_["name"] for _ in static_data["themes"][t]]
|
||||
|
||||
uigrid = [
|
||||
[("设置界面字体", 4), (createfontcombo, 5)],
|
||||
[
|
||||
("字体大小", 4),
|
||||
(
|
||||
D_getspinbox(
|
||||
1,
|
||||
100,
|
||||
globalconfig,
|
||||
"settingfontsize",
|
||||
callback=lambda _: gobject.baseobject.setcommonstylesheet(),
|
||||
),
|
||||
2,
|
||||
),
|
||||
],
|
||||
[
|
||||
("不透明度_翻译窗口", 4),
|
||||
(functools.partial(createhorizontal_slider, self), 8),
|
||||
(functools.partial(createhorizontal_slider_label, self), 2),
|
||||
],
|
||||
[
|
||||
("不透明度_工具栏", 4),
|
||||
(functools.partial(createhorizontal_slider_tool, self), 8),
|
||||
(functools.partial(createhorizontal_slider_tool_label, self), 2),
|
||||
],
|
||||
[
|
||||
("背景颜色_翻译窗口", 4),
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"backcolor",
|
||||
callback=lambda: selectcolor(
|
||||
self,
|
||||
globalconfig,
|
||||
"backcolor",
|
||||
self.back_color_button,
|
||||
callback=gobject.baseobject.translation_ui.set_color_transparency,
|
||||
),
|
||||
name="back_color_button",
|
||||
parent=self,
|
||||
),
|
||||
"",
|
||||
"",
|
||||
("背景颜色_工具栏", 4),
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"backcolor_tool",
|
||||
callback=lambda: selectcolor(
|
||||
self,
|
||||
globalconfig,
|
||||
"backcolor_tool",
|
||||
self.back_color_button_tool,
|
||||
callback=gobject.baseobject.translation_ui.set_color_transparency,
|
||||
),
|
||||
name="back_color_button_tool",
|
||||
parent=self,
|
||||
),
|
||||
],
|
||||
[
|
||||
("工具按钮颜色", 4),
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"buttoncolor",
|
||||
callback=lambda: selectcolor(
|
||||
self,
|
||||
globalconfig,
|
||||
"buttoncolor",
|
||||
self.buttoncolorbutton,
|
||||
callback=lambda: gobject.baseobject.translation_ui.refreshtooliconsignal.emit(),
|
||||
),
|
||||
name="buttoncolorbutton",
|
||||
parent=self,
|
||||
),
|
||||
"",
|
||||
"",
|
||||
("工具按钮大小", 4),
|
||||
(
|
||||
D_getspinbox(
|
||||
5,
|
||||
100,
|
||||
globalconfig,
|
||||
"buttonsize",
|
||||
callback=lambda _: gobject.baseobject.translation_ui.refreshtooliconsignal.emit(),
|
||||
),
|
||||
2,
|
||||
),
|
||||
],
|
||||
[
|
||||
("圆角_半径", 4),
|
||||
(
|
||||
D_getspinbox(
|
||||
0,
|
||||
100,
|
||||
globalconfig,
|
||||
"yuanjiao_r",
|
||||
callback=lambda _: gobject.baseobject.translation_ui.set_color_transparency(),
|
||||
),
|
||||
2,
|
||||
),
|
||||
"",
|
||||
("圆角_合并", 4),
|
||||
D_getsimpleswitch(
|
||||
globalconfig,
|
||||
"yuanjiao_merge",
|
||||
callback=lambda _: gobject.baseobject.translation_ui.set_color_transparency(),
|
||||
),
|
||||
],
|
||||
[],
|
||||
[
|
||||
("明暗", 4),
|
||||
(
|
||||
D_getsimplecombobox(
|
||||
_TRL(["明亮", "黑暗", "跟随系统"]),
|
||||
globalconfig,
|
||||
"darklight",
|
||||
callback=lambda _: gobject.baseobject.setcommonstylesheet(),
|
||||
),
|
||||
5,
|
||||
),
|
||||
],
|
||||
[
|
||||
("明亮主题", 4),
|
||||
(
|
||||
D_getsimplecombobox(
|
||||
_TRL(["默认"]) + themelist("light"),
|
||||
globalconfig,
|
||||
"lighttheme",
|
||||
callback=lambda _: gobject.baseobject.setcommonstylesheet(),
|
||||
),
|
||||
5,
|
||||
),
|
||||
],
|
||||
[
|
||||
("黑暗主题", 4),
|
||||
(
|
||||
D_getsimplecombobox(
|
||||
themelist("dark"),
|
||||
globalconfig,
|
||||
"darktheme",
|
||||
callback=lambda _: gobject.baseobject.setcommonstylesheet(),
|
||||
),
|
||||
5,
|
||||
),
|
||||
],
|
||||
[],
|
||||
[
|
||||
("窗口特效_翻译窗口", 4),
|
||||
(
|
||||
D_getsimplecombobox(
|
||||
["Disable", "Acrylic", "Aero"],
|
||||
globalconfig,
|
||||
"WindowEffect",
|
||||
callback=lambda _: [
|
||||
gobject.baseobject.translation_ui.set_color_transparency(),
|
||||
gobject.baseobject.translation_ui.seteffect(),
|
||||
],
|
||||
),
|
||||
5,
|
||||
),
|
||||
],
|
||||
[
|
||||
("窗口特效_其他", 4),
|
||||
(
|
||||
D_getsimplecombobox(
|
||||
["Solid", "Acrylic", "Mica", "MicaAlt"],
|
||||
globalconfig,
|
||||
"WindowBackdrop",
|
||||
callback=lambda _: gobject.baseobject.setcommonstylesheet(),
|
||||
),
|
||||
5,
|
||||
),
|
||||
],
|
||||
]
|
||||
return uigrid
|
@ -18,7 +18,7 @@ from gui.usefulwidget import (
|
||||
getsimpleswitch,
|
||||
textbrowappendandmovetoend,
|
||||
)
|
||||
from myutils.utils import checkchaos
|
||||
from myutils.utils import checkchaos, get_time_stamp
|
||||
from gui.dialog_savedgame import dialog_setting_game
|
||||
|
||||
|
||||
@ -379,7 +379,6 @@ class hookselect(closeashidewindow):
|
||||
def __init__(self, parent):
|
||||
super(hookselect, self).__init__(parent, globalconfig, "selecthookgeo")
|
||||
self.setupUi()
|
||||
|
||||
self.changeprocessclearsignal.connect(self.changeprocessclear)
|
||||
self.removehooksignal.connect(self.removehook)
|
||||
self.addnewhooksignal.connect(self.addnewhook)
|
||||
@ -576,12 +575,14 @@ class hookselect(closeashidewindow):
|
||||
)
|
||||
|
||||
def setupUi(self):
|
||||
|
||||
self.widget = QWidget()
|
||||
|
||||
self.setCentralWidget(self.widget)
|
||||
self.setWindowIcon(qtawesome.icon("fa.gear"))
|
||||
self.hboxlayout = QHBoxLayout()
|
||||
self.widget.setLayout(self.hboxlayout)
|
||||
self.vboxlayout = QVBoxLayout()
|
||||
self.hboxlayout.addLayout(self.vboxlayout)
|
||||
self.ttCombomodelmodel = QStandardItemModel()
|
||||
|
||||
self.tttable = QTableView()
|
||||
@ -643,11 +644,9 @@ class hookselect(closeashidewindow):
|
||||
self.searchtextbutton.clicked.connect(self.searchtextfunc)
|
||||
self.searchtextlayout.addWidget(self.searchtextbutton)
|
||||
###################
|
||||
self.ttCombomodelmodel2 = QStandardItemModel(self)
|
||||
# self.ttCombomodelmodel.setColumnCount(2)
|
||||
self.ttCombomodelmodel2.setHorizontalHeaderLabels(_TRL(["HOOK", "文本"]))
|
||||
|
||||
self.tttable2 = QTableView(self)
|
||||
self.ttCombomodelmodel2 = QStandardItemModel()
|
||||
self.tttable2 = QTableView()
|
||||
self.vboxlayout.addWidget(self.tttable2)
|
||||
self.tttable2.setModel(self.ttCombomodelmodel2)
|
||||
# self.tttable2 .horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
|
||||
self.tttable2.horizontalHeader().setStretchLastSection(True)
|
||||
@ -658,7 +657,6 @@ class hookselect(closeashidewindow):
|
||||
self.tttable2.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
|
||||
self.tttable2.clicked.connect(self.ViewThread2)
|
||||
|
||||
self.vboxlayout.addWidget(self.tttable2)
|
||||
self.searchtextlayout2 = QHBoxLayout()
|
||||
self.vboxlayout.addLayout(self.searchtextlayout2)
|
||||
self.searchtext2 = QLineEdit()
|
||||
@ -685,16 +683,12 @@ class hookselect(closeashidewindow):
|
||||
self.sysOutput.setReadOnly(True)
|
||||
|
||||
self.tabwidget = QTabWidget()
|
||||
self.vboxlayout.addWidget(self.tabwidget)
|
||||
self.tabwidget.setTabPosition(QTabWidget.TabPosition.East)
|
||||
self.tabwidget.addTab(self.textOutput, _TR("文本"))
|
||||
self.tabwidget.addTab(self.sysOutput, _TR("系统"))
|
||||
|
||||
self.vboxlayout.addWidget(self.tabwidget)
|
||||
self.hboxlayout.addLayout(self.vboxlayout)
|
||||
self.setCentralWidget(self.widget)
|
||||
|
||||
self.changeprocessclear()
|
||||
|
||||
def showmenu(self, p: QPoint):
|
||||
r = self.tttable.currentIndex().row()
|
||||
if r < 0:
|
||||
@ -895,7 +889,8 @@ class hookselect(closeashidewindow):
|
||||
print_exc()
|
||||
|
||||
def showEvent(self, e):
|
||||
gobject.baseobject.AttachProcessDialog.realshowhide.emit(False)
|
||||
if gobject.baseobject.AttachProcessDialog:
|
||||
gobject.baseobject.AttachProcessDialog.close()
|
||||
try:
|
||||
for i in range(len(self.save)):
|
||||
if self.save[i] in gobject.baseobject.textsource.selectedhook:
|
||||
@ -904,18 +899,11 @@ class hookselect(closeashidewindow):
|
||||
except:
|
||||
print_exc()
|
||||
|
||||
def get_time_stamp(self):
|
||||
ct = time.time()
|
||||
local_time = time.localtime(ct)
|
||||
data_head = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
|
||||
data_secs = (ct - int(ct)) * 1000
|
||||
time_stamp = "%s.%03d" % (data_head, data_secs)
|
||||
return time_stamp
|
||||
|
||||
def sysmessage(self, sentence):
|
||||
|
||||
textbrowappendandmovetoend(
|
||||
self.sysOutput, self.get_time_stamp() + " " + sentence
|
||||
self.sysOutput, get_time_stamp() + " " + sentence
|
||||
)
|
||||
|
||||
def getnewsentence(self, sentence):
|
||||
|
@ -1,18 +1,24 @@
|
||||
from qtsymbols import *
|
||||
import qtawesome, gobject
|
||||
import threading, windows, winsharedutils
|
||||
import qtawesome
|
||||
import functools
|
||||
from myutils.config import globalconfig, _TR
|
||||
from myutils.utils import wavmp3player
|
||||
from gui.settingpage1 import setTabOne, setTabOne_direct
|
||||
from gui.settingpage2 import setTabTwo, settab2d
|
||||
from gui.settingpage_xianshishezhi import setTabThree, setTabThree_direct
|
||||
from gui.settingpage_tts import setTab5, setTab5_direct
|
||||
from gui.settingpage1 import setTabOne_lazy
|
||||
from gui.settingpage2 import setTabTwo_lazy, checkconnected
|
||||
from gui.settingpage_xianshishezhi import setTabThree_lazy
|
||||
from gui.gui_xianshi_text import maybehavefontsizespin
|
||||
from gui.settingpage_tts import setTab5, showvoicelist
|
||||
from gui.settingpage_cishu import setTabcishu
|
||||
from gui.settingpage_quick import setTab_quick, setTab_quick_direct
|
||||
from gui.setting_lang import setTablang, setTablangd
|
||||
from gui.settingpage_quick import setTab_quick, registrhotkeys
|
||||
from gui.setting_lang import setTablang
|
||||
from gui.setting_proxy import setTab_proxy
|
||||
from gui.settingpage7 import setTab7, settab7direct
|
||||
from gui.settingpage_about import setTab_about, setTab_about_dicrect
|
||||
from gui.settingpage7 import setTab7_lazy, delaysetcomparetext
|
||||
from gui.settingpage_about import (
|
||||
setTab_aboutlazy,
|
||||
versionlabelmaybesettext,
|
||||
updateprogress,
|
||||
getversion,
|
||||
)
|
||||
from gui.usefulwidget import closeashidewindow, makesubtab_lazy
|
||||
|
||||
|
||||
@ -62,63 +68,73 @@ class Settin(closeashidewindow):
|
||||
versiontextsignal = pyqtSignal(str)
|
||||
progresssignal = pyqtSignal(str, int)
|
||||
fontbigsmallsignal = pyqtSignal(int)
|
||||
clicksourcesignal = pyqtSignal(str)
|
||||
opensolvetextsig = pyqtSignal()
|
||||
showandsolvesig = pyqtSignal(str)
|
||||
setstylesheetsignal = pyqtSignal()
|
||||
|
||||
def __init__(self, parent):
|
||||
super(Settin, self).__init__(parent, globalconfig, "setting_geo_2")
|
||||
self.setWindowIcon(qtawesome.icon("fa.gear"))
|
||||
self.mp3player = wavmp3player()
|
||||
self.mp3playsignal.connect(self.mp3player.mp3playfunction)
|
||||
self.opensolvetextsig.connect(self.opensolvetextfun)
|
||||
self.showandsolvesig.connect(functools.partial(delaysetcomparetext, self))
|
||||
self.fontbigsmallsignal.connect(functools.partial(maybehavefontsizespin, self))
|
||||
self.voicelistsignal.connect(functools.partial(showvoicelist, self))
|
||||
self.versiontextsignal.connect(
|
||||
functools.partial(versionlabelmaybesettext, self)
|
||||
)
|
||||
self.progresssignal.connect(lambda text, val: updateprogress(self, text, val))
|
||||
self.isfirst = True
|
||||
getversion(self)
|
||||
checkconnected(self)
|
||||
registrhotkeys(self)
|
||||
|
||||
def showEvent(self, e: QShowEvent):
|
||||
if self.isfirst:
|
||||
self.isfirst = False
|
||||
self.firstshow()
|
||||
super().showEvent(e)
|
||||
|
||||
def firstshow(self):
|
||||
|
||||
self.setMinimumSize(100, 100)
|
||||
self.list_width = 100
|
||||
self.window_height = 500
|
||||
self.savelastrect = None
|
||||
|
||||
self.hooks = []
|
||||
|
||||
self.usevoice = 0
|
||||
setTabOne_direct(self)
|
||||
settab2d(self)
|
||||
settab7direct(self)
|
||||
setTabThree_direct(self)
|
||||
setTab5_direct(self)
|
||||
setTab_quick_direct(self)
|
||||
setTablangd(self)
|
||||
setTab_about_dicrect(self)
|
||||
|
||||
self.setstylesheetsignal.connect(gobject.baseobject.setcommonstylesheet)
|
||||
threading.Thread(target=self.darklistener).start()
|
||||
|
||||
self.setWindowTitle(_TR("设置"))
|
||||
self.setWindowIcon(qtawesome.icon("fa.gear"))
|
||||
|
||||
self.tab_widget = makesubtab_lazy(klass=TabWidget)
|
||||
self.tab_widget, do = makesubtab_lazy(
|
||||
[
|
||||
"文本输入",
|
||||
"翻译设置",
|
||||
"显示设置",
|
||||
"文本处理",
|
||||
"辞书设置",
|
||||
"语音合成",
|
||||
"快捷按键",
|
||||
"语言设置",
|
||||
"代理设置",
|
||||
"其他设置",
|
||||
],
|
||||
[
|
||||
functools.partial(setTabOne_lazy, self),
|
||||
functools.partial(setTabTwo_lazy, self),
|
||||
functools.partial(setTabThree_lazy, self),
|
||||
functools.partial(setTab7_lazy, self),
|
||||
functools.partial(setTabcishu, self),
|
||||
functools.partial(setTab5, self),
|
||||
functools.partial(setTab_quick, self),
|
||||
functools.partial(setTablang, self),
|
||||
functools.partial(setTab_proxy, self),
|
||||
functools.partial(setTab_aboutlazy, self),
|
||||
],
|
||||
klass=TabWidget,
|
||||
delay=True,
|
||||
)
|
||||
self.setCentralWidget(self.tab_widget)
|
||||
|
||||
do()
|
||||
self.tab_widget.setStyleSheet(
|
||||
"""QListWidget {
|
||||
font:16pt ; }
|
||||
"""
|
||||
)
|
||||
# self.tab_widget.setTabPosition(QTabWidget.West)
|
||||
setTabOne(self)
|
||||
setTabTwo(self)
|
||||
|
||||
setTabThree(self)
|
||||
setTab7(self)
|
||||
setTabcishu(self)
|
||||
setTab5(self)
|
||||
|
||||
setTab_quick(self)
|
||||
|
||||
setTablang(self)
|
||||
setTab_proxy(self)
|
||||
setTab_about(self)
|
||||
|
||||
width = 0
|
||||
fn = QFont()
|
||||
fn.setPixelSize(16)
|
||||
@ -128,17 +144,7 @@ class Settin(closeashidewindow):
|
||||
width = max(fm.size(0, title).width(), width)
|
||||
width += 100
|
||||
self.tab_widget.list_widget.setFixedWidth(width)
|
||||
self.list_width = width
|
||||
|
||||
def opensolvetextfun(self):
|
||||
self.show()
|
||||
self.tab_widget.setCurrentIndex(3)
|
||||
|
||||
def darklistener(self):
|
||||
sema = winsharedutils.startdarklistener()
|
||||
while True:
|
||||
# 会触发两次
|
||||
windows.WaitForSingleObject(sema, windows.INFINITE)
|
||||
if globalconfig["darklight"] == 2:
|
||||
self.setstylesheetsignal.emit()
|
||||
windows.WaitForSingleObject(sema, windows.INFINITE)
|
||||
|
@ -1,35 +1,31 @@
|
||||
import os
|
||||
import os, functools
|
||||
from myutils.config import globalconfig, _TRL, static_data, getlanguse
|
||||
from gui.usefulwidget import (
|
||||
D_getsimplecombobox,
|
||||
getsimplecombobox,
|
||||
getcolorbutton,
|
||||
makegrid,
|
||||
tabadd_lazy,
|
||||
makescroll,
|
||||
D_getcolorbutton,
|
||||
makescrollgrid,
|
||||
)
|
||||
|
||||
|
||||
def setTablang(self):
|
||||
tabadd_lazy(self.tab_widget, ("语言设置"), lambda: setTablanglz(self))
|
||||
|
||||
|
||||
def setTablangd(self):
|
||||
def createlangs(self):
|
||||
self.srclangswitcher = getsimplecombobox(
|
||||
_TRL(static_data["language_list_translator"]), globalconfig, "srclang3"
|
||||
)
|
||||
return self.srclangswitcher
|
||||
|
||||
|
||||
def setTablanglz(self):
|
||||
grids = [
|
||||
return [
|
||||
[("翻译及OCR语言", 15)],
|
||||
[
|
||||
("源语言", 5),
|
||||
(self.srclangswitcher, 5),
|
||||
(functools.partial(createlangs, self), 5),
|
||||
],
|
||||
[
|
||||
("目标语言", 5),
|
||||
(
|
||||
getsimplecombobox(
|
||||
D_getsimplecombobox(
|
||||
_TRL(static_data["language_list_translator"]),
|
||||
globalconfig,
|
||||
"tgtlang3",
|
||||
@ -41,13 +37,13 @@ def setTablanglz(self):
|
||||
[
|
||||
("本软件显示语言(重启生效)", 5),
|
||||
(
|
||||
getsimplecombobox(
|
||||
D_getsimplecombobox(
|
||||
(static_data["language_list_show"]), globalconfig, "languageuse"
|
||||
),
|
||||
5,
|
||||
),
|
||||
(
|
||||
getcolorbutton(
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=lambda: os.startfile(
|
||||
@ -62,7 +58,6 @@ def setTablanglz(self):
|
||||
[],
|
||||
]
|
||||
|
||||
gridlayoutwidget = makegrid(grids)
|
||||
gridlayoutwidget = makescroll(gridlayoutwidget)
|
||||
|
||||
return gridlayoutwidget
|
||||
def setTablang(self, l):
|
||||
makescrollgrid(setTablanglz(self), l)
|
||||
|
@ -3,14 +3,13 @@ from myutils.config import _TR
|
||||
from myutils.config import globalconfig
|
||||
from myutils.utils import splittranslatortypes
|
||||
from gui.usefulwidget import (
|
||||
getsimpleswitch,
|
||||
D_getsimpleswitch,
|
||||
makegrid,
|
||||
makesubtab_lazy,
|
||||
tabadd_lazy,
|
||||
makevbox,
|
||||
makescroll,
|
||||
getvboxwidget,
|
||||
makescrollgrid,
|
||||
)
|
||||
import os
|
||||
import os, functools
|
||||
|
||||
|
||||
def getall(l, item="fanyi", name=""):
|
||||
@ -28,7 +27,7 @@ def getall(l, item="fanyi", name=""):
|
||||
|
||||
line += [
|
||||
(globalconfig[item][fanyi]["name"], 6),
|
||||
getsimpleswitch(globalconfig[item][fanyi], "useproxy", default=True),
|
||||
D_getsimpleswitch(globalconfig[item][fanyi], "useproxy", default=True),
|
||||
"",
|
||||
]
|
||||
if i % 3 == 0:
|
||||
@ -41,35 +40,50 @@ def getall(l, item="fanyi", name=""):
|
||||
return grids
|
||||
|
||||
|
||||
def setTab_proxy_lazy(self):
|
||||
def createcheckbtn(self):
|
||||
|
||||
proxy = QLineEdit(globalconfig["proxy"])
|
||||
btn = QPushButton(_TR("确定"))
|
||||
|
||||
btn.clicked.connect(lambda x: globalconfig.__setitem__("proxy", proxy.text()))
|
||||
btn.clicked.connect(
|
||||
lambda x: globalconfig.__setitem__("proxy", self.__proxyedit.text())
|
||||
)
|
||||
self.__checkproxybtn = btn
|
||||
_ifusesysproxy(self, globalconfig["usesysproxy"])
|
||||
return btn
|
||||
|
||||
def _ifusesysproxy(x):
|
||||
proxy.setEnabled(not x)
|
||||
btn.setEnabled(not x)
|
||||
|
||||
_ifusesysproxy(globalconfig["usesysproxy"])
|
||||
def createproxyedit(self):
|
||||
proxy = QLineEdit(globalconfig["proxy"])
|
||||
self.__proxyedit = proxy
|
||||
return proxy
|
||||
|
||||
|
||||
def _ifusesysproxy(self, x):
|
||||
self.__proxyedit.setEnabled(not x)
|
||||
self.__checkproxybtn.setEnabled(not x)
|
||||
|
||||
|
||||
def setTab_proxy_lazy(self, basel):
|
||||
|
||||
grid1 = [
|
||||
[("使用代理", 5), (getsimpleswitch(globalconfig, "useproxy"), 1), ("", 10)],
|
||||
[("使用代理", 5), (D_getsimpleswitch(globalconfig, "useproxy"), 1), ("", 10)],
|
||||
[
|
||||
("自动获取系统代理", 5),
|
||||
(
|
||||
getsimpleswitch(
|
||||
globalconfig, "usesysproxy", callback=lambda x: _ifusesysproxy(x)
|
||||
D_getsimpleswitch(
|
||||
globalconfig,
|
||||
"usesysproxy",
|
||||
callback=lambda x: _ifusesysproxy(self, x),
|
||||
)
|
||||
),
|
||||
],
|
||||
[
|
||||
("手动设置代理(ip:port)", 5),
|
||||
(proxy, 5),
|
||||
(btn, 2),
|
||||
(functools.partial(createproxyedit, self), 5),
|
||||
(functools.partial(createcheckbtn, self), 2),
|
||||
],
|
||||
[],
|
||||
[("使用代理的项目", 5)],
|
||||
[("使用代理的项目", -1)],
|
||||
]
|
||||
lixians, pre, mianfei, develop, shoufei = splittranslatortypes()
|
||||
|
||||
@ -80,18 +94,23 @@ def setTab_proxy_lazy(self):
|
||||
item="ocr",
|
||||
name="./Lunatranslator/ocrengines/%s.py",
|
||||
)
|
||||
tab = makesubtab_lazy(
|
||||
vw, vl = getvboxwidget()
|
||||
basel.addWidget(vw)
|
||||
gridlayoutwidget, do = makegrid(grid1, delay=True)
|
||||
vl.addWidget(gridlayoutwidget)
|
||||
tab, dotab = makesubtab_lazy(
|
||||
["在线翻译", "注册在线翻译", "在线OCR"],
|
||||
[
|
||||
lambda: makescroll(makegrid(mianfei)),
|
||||
lambda: makescroll(makegrid(shoufei)),
|
||||
lambda: makescroll(makegrid(ocrs)),
|
||||
functools.partial(makescrollgrid, mianfei),
|
||||
functools.partial(makescrollgrid, shoufei),
|
||||
functools.partial(makescrollgrid, ocrs),
|
||||
],
|
||||
delay=True,
|
||||
)
|
||||
|
||||
gridlayoutwidget = makegrid(grid1)
|
||||
return makevbox([gridlayoutwidget, tab])
|
||||
vl.addWidget(tab)
|
||||
do()
|
||||
dotab()
|
||||
|
||||
|
||||
def setTab_proxy(self):
|
||||
tabadd_lazy(self.tab_widget, ("代理设置"), lambda: setTab_proxy_lazy(self))
|
||||
def setTab_proxy(self, l):
|
||||
setTab_proxy_lazy(self, l)
|
||||
|
@ -7,16 +7,16 @@ from gui.dialog_savedgame import dialog_savedgame_new
|
||||
import gobject
|
||||
from gui.inputdialog import regexedit
|
||||
from gui.usefulwidget import (
|
||||
getsimplecombobox,
|
||||
getspinbox,
|
||||
makescroll,
|
||||
getcolorbutton,
|
||||
D_getsimplecombobox,
|
||||
D_getspinbox,
|
||||
D_getcolorbutton,
|
||||
makegrid,
|
||||
tabadd_lazy,
|
||||
yuitsu_switch,
|
||||
makevbox,
|
||||
getsimpleswitch,
|
||||
getvboxwidget,
|
||||
D_getsimpleswitch,
|
||||
makesubtab_lazy,
|
||||
makescrollgrid,
|
||||
)
|
||||
from gui.codeacceptdialog import codeacceptdialog
|
||||
from myutils.utils import makehtml, getfilemd5
|
||||
@ -30,17 +30,40 @@ def gethookgrid(self):
|
||||
(makehtml("https://github.com/HIllya51/LunaHook"), 8, "link"),
|
||||
],
|
||||
[],
|
||||
[("选择游戏", 5), self.selectbutton, ("", 5)],
|
||||
[("选择文本", 5), self.selecthookbutton],
|
||||
[
|
||||
("选择游戏", 5),
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
gobject.baseobject.createattachprocess,
|
||||
name="selectbutton",
|
||||
parent=self,
|
||||
icon="fa.gear",
|
||||
constcolor="#FF69B4",
|
||||
),
|
||||
("", 5),
|
||||
],
|
||||
[
|
||||
("选择文本", 5),
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
lambda: gobject.baseobject.hookselectdialog.showsignal.emit(),
|
||||
name="selecthookbutton",
|
||||
parent=self,
|
||||
icon="fa.gear",
|
||||
constcolor="#FF69B4",
|
||||
),
|
||||
],
|
||||
[],
|
||||
[
|
||||
("检测到游戏时自动开始", 5),
|
||||
(getsimpleswitch(globalconfig, "autostarthook"), 1),
|
||||
(D_getsimpleswitch(globalconfig, "autostarthook"), 1),
|
||||
],
|
||||
[
|
||||
("已保存游戏", 5),
|
||||
(
|
||||
getcolorbutton(
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
icon="fa.gamepad",
|
||||
@ -53,12 +76,12 @@ def gethookgrid(self):
|
||||
[],
|
||||
[
|
||||
("过滤反复刷新的句子", 5),
|
||||
(getsimpleswitch(globalconfig, "direct_filterrepeat"), 1),
|
||||
(D_getsimpleswitch(globalconfig, "direct_filterrepeat"), 1),
|
||||
],
|
||||
[
|
||||
("刷新延迟(ms)", 5),
|
||||
(
|
||||
getspinbox(
|
||||
D_getspinbox(
|
||||
0,
|
||||
10000,
|
||||
globalconfig,
|
||||
@ -71,7 +94,7 @@ def gethookgrid(self):
|
||||
[
|
||||
("最大缓冲区长度", 5),
|
||||
(
|
||||
getspinbox(
|
||||
D_getspinbox(
|
||||
0,
|
||||
1000000,
|
||||
globalconfig,
|
||||
@ -84,7 +107,7 @@ def gethookgrid(self):
|
||||
[
|
||||
("最大缓存文本长度", 5),
|
||||
(
|
||||
getspinbox(
|
||||
D_getspinbox(
|
||||
0,
|
||||
1000000000,
|
||||
globalconfig,
|
||||
@ -97,9 +120,9 @@ def gethookgrid(self):
|
||||
[],
|
||||
[
|
||||
("过滤包含乱码的文本行", 5),
|
||||
(getsimpleswitch(globalconfig, "filter_chaos_code"), 1),
|
||||
(D_getsimpleswitch(globalconfig, "filter_chaos_code"), 1),
|
||||
(
|
||||
getcolorbutton(
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
icon="fa.gear",
|
||||
@ -110,8 +133,8 @@ def gethookgrid(self):
|
||||
),
|
||||
],
|
||||
[],
|
||||
[("区分人名和文本", 5), getsimpleswitch(globalconfig, "allow_set_text_name")],
|
||||
[("使用YAPI注入", 5), getsimpleswitch(globalconfig, "use_yapi")],
|
||||
[("区分人名和文本", 5), D_getsimpleswitch(globalconfig, "allow_set_text_name")],
|
||||
[("使用YAPI注入", 5), D_getsimpleswitch(globalconfig, "use_yapi")],
|
||||
]
|
||||
|
||||
return grids
|
||||
@ -223,8 +246,9 @@ def exportchspatch(self):
|
||||
ff.write("{}")
|
||||
|
||||
|
||||
def gethookembedgrid(self):
|
||||
self.gamefont_comboBox = QFontComboBox()
|
||||
def creategamefont_comboBox():
|
||||
|
||||
gamefont_comboBox = QFontComboBox()
|
||||
|
||||
def callback(x):
|
||||
globalconfig["embedded"].__setitem__("changefont_font", x)
|
||||
@ -233,14 +257,16 @@ def gethookembedgrid(self):
|
||||
except:
|
||||
pass
|
||||
|
||||
self.gamefont_comboBox.currentTextChanged.connect(callback)
|
||||
self.gamefont_comboBox.setCurrentFont(
|
||||
QFont(globalconfig["embedded"]["changefont_font"])
|
||||
)
|
||||
gamefont_comboBox.currentTextChanged.connect(callback)
|
||||
gamefont_comboBox.setCurrentFont(QFont(globalconfig["embedded"]["changefont_font"]))
|
||||
return gamefont_comboBox
|
||||
|
||||
|
||||
def gethookembedgrid(self):
|
||||
grids = [
|
||||
[
|
||||
("导出翻译补丁", 5),
|
||||
getcolorbutton(
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=lambda x: exportchspatch(self),
|
||||
@ -252,7 +278,7 @@ def gethookembedgrid(self):
|
||||
[
|
||||
("保留原文", 5),
|
||||
(
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig["embedded"],
|
||||
"keeprawtext",
|
||||
callback=lambda _: gobject.baseobject.textsource.flashembedsettings(),
|
||||
@ -264,7 +290,7 @@ def gethookembedgrid(self):
|
||||
("翻译等待时间(s)", 5),
|
||||
"",
|
||||
(
|
||||
getspinbox(
|
||||
D_getspinbox(
|
||||
0,
|
||||
30,
|
||||
globalconfig["embedded"],
|
||||
@ -278,13 +304,13 @@ def gethookembedgrid(self):
|
||||
],
|
||||
[
|
||||
("使用最快翻译而非指定翻译器", 5),
|
||||
(getsimpleswitch(globalconfig["embedded"], "as_fast_as_posible"), 1),
|
||||
(D_getsimpleswitch(globalconfig["embedded"], "as_fast_as_posible"), 1),
|
||||
],
|
||||
[
|
||||
("内嵌的翻译器", 5),
|
||||
"",
|
||||
(
|
||||
getsimplecombobox(
|
||||
D_getsimplecombobox(
|
||||
_TRL(
|
||||
[
|
||||
globalconfig["fanyi"][x]["name"]
|
||||
@ -300,13 +326,13 @@ def gethookembedgrid(self):
|
||||
],
|
||||
[
|
||||
("将汉字转换成繁体/日式汉字", 5),
|
||||
(getsimpleswitch(globalconfig["embedded"], "trans_kanji"), 1),
|
||||
(D_getsimpleswitch(globalconfig["embedded"], "trans_kanji"), 1),
|
||||
],
|
||||
[
|
||||
("在重叠显示的字间插入空格", 5),
|
||||
"",
|
||||
(
|
||||
getsimplecombobox(
|
||||
D_getsimplecombobox(
|
||||
_TRL(["不插入空格", "每个字后插入空格", "仅在无法编码的字后插入"]),
|
||||
globalconfig["embedded"],
|
||||
"insertspace_policy",
|
||||
@ -318,20 +344,20 @@ def gethookembedgrid(self):
|
||||
[
|
||||
("修改游戏字体", 5),
|
||||
(
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig["embedded"],
|
||||
"changefont",
|
||||
callback=lambda _: gobject.baseobject.textsource.flashembedsettings(),
|
||||
),
|
||||
1,
|
||||
),
|
||||
(self.gamefont_comboBox, 5),
|
||||
(creategamefont_comboBox, 5),
|
||||
],
|
||||
[],
|
||||
[
|
||||
("内嵌安全性检查", 5),
|
||||
getsimpleswitch(globalconfig["embedded"], "safecheck_use"),
|
||||
getcolorbutton(
|
||||
D_getsimpleswitch(globalconfig["embedded"], "safecheck_use"),
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=lambda x: regexedit(
|
||||
@ -341,7 +367,6 @@ def gethookembedgrid(self):
|
||||
constcolor="#FF69B4",
|
||||
),
|
||||
],
|
||||
# [('修改字体字符集',5),(getsimpleswitch( globalconfig['embedded'] ,'changecharset',callback=lambda _:gobject.baseobject.textsource.flashembedsettings()),1) ,(getsimplecombobox(_TRL(static_data["charsetmapshow"]),globalconfig['embedded'],'changecharset_charset',callback=lambda _:gobject.baseobject.textsource.flashembedsettings()),5)],
|
||||
]
|
||||
|
||||
return grids
|
||||
@ -352,7 +377,7 @@ def getTabclip(self):
|
||||
grids = [
|
||||
[
|
||||
("排除复制自翻译器的文本", 3),
|
||||
getsimpleswitch(globalconfig, "excule_from_self"),
|
||||
D_getsimpleswitch(globalconfig, "excule_from_self"),
|
||||
("", 3),
|
||||
]
|
||||
]
|
||||
@ -362,20 +387,20 @@ def getTabclip(self):
|
||||
def outputgrid(self):
|
||||
|
||||
grids = [
|
||||
[("自动输出提取的文本", 10)],
|
||||
[("自动输出提取的文本", 15)],
|
||||
[],
|
||||
[("剪贴板", 10)],
|
||||
[("剪贴板", 0)],
|
||||
[
|
||||
"",
|
||||
("输出到剪贴板", 5),
|
||||
(getsimpleswitch(globalconfig["textoutputer"]["clipboard"], "use"), 1),
|
||||
(D_getsimpleswitch(globalconfig["textoutputer"]["clipboard"], "use"), 1),
|
||||
],
|
||||
[("WebSocket", 10)],
|
||||
[("WebSocket", -1)],
|
||||
[
|
||||
"",
|
||||
("输出到WebSocket", 5),
|
||||
(
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig["textoutputer"]["websocket"],
|
||||
"use",
|
||||
callback=lambda _: gobject.baseobject.startoutputer_re("websocket"),
|
||||
@ -387,7 +412,7 @@ def outputgrid(self):
|
||||
"",
|
||||
("端口号", 5),
|
||||
(
|
||||
getspinbox(
|
||||
D_getspinbox(
|
||||
0,
|
||||
65535,
|
||||
globalconfig["textoutputer"]["websocket"],
|
||||
@ -401,14 +426,17 @@ def outputgrid(self):
|
||||
return grids
|
||||
|
||||
|
||||
def setTabOne_direct(self):
|
||||
def setTabOne(self):
|
||||
tabadd_lazy(self.tab_widget, ("文本输入"), lambda l: setTabOne_lazy(self, l))
|
||||
|
||||
self.tab1grids = [
|
||||
[("选择文本输入源", 8)],
|
||||
|
||||
def setTabOne_lazy(self, basel):
|
||||
tab1grids = [
|
||||
[("选择文本输入源", -1)],
|
||||
[
|
||||
("HOOK", 3),
|
||||
(
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig["sourcestatus2"]["texthook"],
|
||||
"use",
|
||||
name="texthook",
|
||||
@ -428,7 +456,7 @@ def setTabOne_direct(self):
|
||||
"",
|
||||
("OCR", 3),
|
||||
(
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig["sourcestatus2"]["ocr"],
|
||||
"use",
|
||||
name="ocr",
|
||||
@ -448,7 +476,7 @@ def setTabOne_direct(self):
|
||||
"",
|
||||
("剪贴板", 3),
|
||||
(
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig["sourcestatus2"]["copy"],
|
||||
"use",
|
||||
name="copy",
|
||||
@ -469,57 +497,21 @@ def setTabOne_direct(self):
|
||||
],
|
||||
]
|
||||
|
||||
getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
name="selectbutton",
|
||||
parent=self,
|
||||
icon="fa.gear",
|
||||
constcolor="#FF69B4",
|
||||
callback=lambda: gobject.baseobject.AttachProcessDialog.showsignal.emit(),
|
||||
)
|
||||
getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
name="selectbuttonembed",
|
||||
parent=self,
|
||||
icon="fa.gear",
|
||||
constcolor="#FF69B4",
|
||||
callback=lambda: gobject.baseobject.AttachProcessDialog.showsignal.emit(),
|
||||
)
|
||||
getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
name="selecthookbutton",
|
||||
parent=self,
|
||||
icon="fa.gear",
|
||||
constcolor="#FF69B4",
|
||||
callback=lambda: gobject.baseobject.hookselectdialog.showsignal.emit(),
|
||||
)
|
||||
self.clicksourcesignal.connect(lambda k: getattr(self, "sourceswitchs")[k].click())
|
||||
|
||||
self.threshold1label = QLabel()
|
||||
self.threshold2label = QLabel()
|
||||
|
||||
self.Scriptscombo = QComboBox()
|
||||
|
||||
|
||||
def setTabOne(self):
|
||||
tabadd_lazy(self.tab_widget, ("文本输入"), lambda: setTabOne_lazy(self))
|
||||
|
||||
|
||||
def setTabOne_lazy(self):
|
||||
|
||||
tab = makesubtab_lazy(
|
||||
vw, vl = getvboxwidget()
|
||||
basel.addWidget(vw)
|
||||
gridlayoutwidget, do = makegrid(tab1grids, delay=True)
|
||||
vl.addWidget(gridlayoutwidget)
|
||||
tab, dotab = makesubtab_lazy(
|
||||
["HOOK设置", "OCR设置", "剪贴板", "内嵌翻译", "文本输出"],
|
||||
[
|
||||
lambda: makescroll(makegrid(gethookgrid(self))),
|
||||
lambda: makescroll(makegrid(getocrgrid(self))),
|
||||
lambda: makescroll(makegrid(getTabclip(self))),
|
||||
lambda: makescroll(makegrid(gethookembedgrid(self))),
|
||||
lambda: makescroll(makegrid(outputgrid(self))),
|
||||
lambda l: makescrollgrid(gethookgrid(self), l),
|
||||
lambda l: makescrollgrid(getocrgrid(self), l),
|
||||
lambda l: makescrollgrid(getTabclip(self), l),
|
||||
lambda l: makescrollgrid(gethookembedgrid(self), l),
|
||||
lambda l: makescrollgrid(outputgrid(self), l),
|
||||
],
|
||||
delay=True,
|
||||
)
|
||||
|
||||
gridlayoutwidget = makegrid(self.tab1grids)
|
||||
return makevbox([gridlayoutwidget, tab])
|
||||
vl.addWidget(tab)
|
||||
do()
|
||||
dotab()
|
||||
|
@ -6,19 +6,20 @@ from myutils.subproc import subproc_w
|
||||
from gui.pretransfile import sqlite2json
|
||||
from myutils.config import globalconfig, _TR
|
||||
from myutils.utils import selectdebugfile, splittranslatortypes, checkportavailable
|
||||
import os, time, requests, threading
|
||||
import os, time, requests
|
||||
from gui.inputdialog import autoinitdialog, autoinitdialog_items
|
||||
from gui.usefulwidget import (
|
||||
D_getspinbox,
|
||||
getspinbox,
|
||||
getcolorbutton,
|
||||
getsimpleswitch,
|
||||
D_getcolorbutton,
|
||||
D_getsimpleswitch,
|
||||
selectcolor,
|
||||
makegrid,
|
||||
makesubtab_lazy,
|
||||
makescroll,
|
||||
makevbox,
|
||||
tabadd_lazy,
|
||||
makescrollgrid,
|
||||
getvboxwidget,
|
||||
)
|
||||
from myutils.wrapper import threader
|
||||
import time, hashlib
|
||||
|
||||
|
||||
@ -45,7 +46,7 @@ def initsome11(self, l, label=None):
|
||||
if fanyi in translatorsetting:
|
||||
|
||||
items = autoinitdialog_items(translatorsetting[fanyi])
|
||||
last = getcolorbutton(
|
||||
last = D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=functools.partial(
|
||||
@ -59,7 +60,7 @@ def initsome11(self, l, label=None):
|
||||
constcolor="#FF69B4",
|
||||
)
|
||||
elif fanyi == "selfbuild":
|
||||
last = getcolorbutton(
|
||||
last = D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=lambda: selectdebugfile("./userconfig/selfbuild.py"),
|
||||
@ -70,12 +71,12 @@ def initsome11(self, l, label=None):
|
||||
last = ""
|
||||
line += [
|
||||
(globalconfig["fanyi"][fanyi]["name"], 6),
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig["fanyi"][fanyi],
|
||||
"use",
|
||||
callback=functools.partial(gobject.baseobject.prepare, fanyi),
|
||||
),
|
||||
getcolorbutton(
|
||||
D_getcolorbutton(
|
||||
globalconfig["fanyi"][fanyi],
|
||||
"color",
|
||||
parent=self,
|
||||
@ -103,83 +104,98 @@ def initsome11(self, l, label=None):
|
||||
return grids
|
||||
|
||||
|
||||
def setTabTwo(self):
|
||||
tabadd_lazy(self.tab_widget, ("翻译设置"), lambda: setTabTwo_lazy(self))
|
||||
def statuslabelsettext(self, text):
|
||||
try:
|
||||
self.statuslabel.setText(text)
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
def settab2d(self):
|
||||
def createstatuslabel(self):
|
||||
|
||||
self.statuslabel = QLabel()
|
||||
return self.statuslabel
|
||||
|
||||
def checkconnected():
|
||||
lixians, pre, mianfei, develop, shoufei = splittranslatortypes()
|
||||
while True:
|
||||
port = globalconfig["debugport"]
|
||||
_path = None
|
||||
for syspath in [
|
||||
globalconfig["chromepath"],
|
||||
r"C:\Program Files\Google\Chrome\Application\chrome.exe",
|
||||
r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe",
|
||||
]:
|
||||
if os.path.exists(syspath) and os.path.isfile(syspath):
|
||||
_path = syspath
|
||||
break
|
||||
needstart = (
|
||||
any([globalconfig["fanyi"][dev]["use"] for dev in develop]) and _path
|
||||
)
|
||||
try:
|
||||
|
||||
@threader
|
||||
def checkconnected(self):
|
||||
lixians, pre, mianfei, develop, shoufei = splittranslatortypes()
|
||||
while True:
|
||||
port = globalconfig["debugport"]
|
||||
_path = None
|
||||
for syspath in [
|
||||
globalconfig["chromepath"],
|
||||
r"C:\Program Files\Google\Chrome\Application\chrome.exe",
|
||||
r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe",
|
||||
]:
|
||||
if os.path.exists(syspath) and os.path.isfile(syspath):
|
||||
_path = syspath
|
||||
break
|
||||
needstart = (
|
||||
any([globalconfig["fanyi"][dev]["use"] for dev in develop]) and _path
|
||||
)
|
||||
try:
|
||||
|
||||
if needstart:
|
||||
requests.get("http://127.0.0.1:{}/json/list".format(port)).json()
|
||||
statuslabelsettext(self, _TR("连接成功"))
|
||||
except:
|
||||
if checkportavailable(port):
|
||||
statuslabelsettext(self, _TR("连接失败"))
|
||||
if needstart:
|
||||
requests.get("http://127.0.0.1:{}/json/list".format(port)).json()
|
||||
self.statuslabel.setText(_TR("连接成功"))
|
||||
except:
|
||||
if checkportavailable(port):
|
||||
self.statuslabel.setText(_TR("连接失败"))
|
||||
if needstart:
|
||||
call = (
|
||||
'"%s" --disable-extensions --remote-allow-origins=* --disable-gpu --no-first-run --remote-debugging-port=%d --user-data-dir="%s"'
|
||||
% (
|
||||
_path,
|
||||
port,
|
||||
os.path.abspath("./chrome_cache/" + hashtext(_path)),
|
||||
)
|
||||
call = (
|
||||
'"%s" --disable-extensions --remote-allow-origins=* --disable-gpu --no-first-run --remote-debugging-port=%d --user-data-dir="%s"'
|
||||
% (
|
||||
_path,
|
||||
port,
|
||||
os.path.abspath("./chrome_cache/" + hashtext(_path)),
|
||||
)
|
||||
print(call)
|
||||
self.engine = subproc_w(call)
|
||||
else:
|
||||
self.statuslabel.setText(_TR("端口冲突"))
|
||||
time.sleep(1)
|
||||
|
||||
threading.Thread(target=checkconnected).start()
|
||||
)
|
||||
print(call)
|
||||
self.engine = subproc_w(call)
|
||||
else:
|
||||
statuslabelsettext(self, _TR("端口冲突"))
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
def setTabTwo_lazy(self):
|
||||
def createbtnexport(self):
|
||||
|
||||
bt = QPushButton(_TR("导出翻译记录为json文件"))
|
||||
bt.clicked.connect(lambda x: sqlite2json(self))
|
||||
return bt
|
||||
|
||||
|
||||
def createfuzspin(self):
|
||||
|
||||
_fuzainum = getspinbox(1, 99999, globalconfig, "loadbalance_oncenum", step=1)
|
||||
_fuzainum.setEnabled(globalconfig["loadbalance"])
|
||||
self._fuzainum = _fuzainum
|
||||
return _fuzainum
|
||||
|
||||
|
||||
def setTabTwo_lazy(self, basel):
|
||||
|
||||
grids = [
|
||||
[
|
||||
("最短翻译字数", 7),
|
||||
(getspinbox(0, 9999, globalconfig, "minlength"), 3),
|
||||
(D_getspinbox(0, 9999, globalconfig, "minlength"), 3),
|
||||
"",
|
||||
("最长翻译字数", 7),
|
||||
(getspinbox(0, 9999, globalconfig, "maxlength"), 3),
|
||||
(D_getspinbox(0, 9999, globalconfig, "maxlength"), 3),
|
||||
"",
|
||||
],
|
||||
[
|
||||
("使用翻译缓存", 8),
|
||||
(getsimpleswitch(globalconfig, "uselongtermcache")),
|
||||
(D_getsimpleswitch(globalconfig, "uselongtermcache")),
|
||||
"",
|
||||
"",
|
||||
("显示错误信息", 8),
|
||||
(getsimpleswitch(globalconfig, "showtranexception"), 1),
|
||||
(D_getsimpleswitch(globalconfig, "showtranexception"), 1),
|
||||
"",
|
||||
"",
|
||||
("翻译请求间隔(s)", 7),
|
||||
(
|
||||
getspinbox(
|
||||
D_getspinbox(
|
||||
0, 9999, globalconfig, "requestinterval", step=0.1, double=True
|
||||
),
|
||||
3,
|
||||
@ -188,29 +204,29 @@ def setTabTwo_lazy(self):
|
||||
[
|
||||
("均衡负载", 8),
|
||||
(
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig,
|
||||
"loadbalance",
|
||||
callback=lambda x: _fuzainum.setEnabled(x),
|
||||
callback=lambda x: self._fuzainum.setEnabled(x),
|
||||
)
|
||||
),
|
||||
"",
|
||||
"",
|
||||
("单次负载个数", 7),
|
||||
(_fuzainum, 3),
|
||||
(functools.partial(createfuzspin, self), 3),
|
||||
],
|
||||
]
|
||||
online_reg_grid = [[("若有多个api key,用|将每个key连接后填入,即可轮流使用", 24)]]
|
||||
online_reg_grid = [[("若有多个api key,用|将每个key连接后填入,即可轮流使用", -1)]]
|
||||
pretransgrid = [
|
||||
[
|
||||
("预翻译采用模糊匹配", 8),
|
||||
(getsimpleswitch(globalconfig, "premtsimiuse"), 1),
|
||||
(D_getsimpleswitch(globalconfig, "premtsimiuse"), 1),
|
||||
"",
|
||||
("模糊匹配_相似度_%", 8),
|
||||
(getspinbox(0, 100, globalconfig, "premtsimi2"), 3),
|
||||
(D_getspinbox(0, 100, globalconfig, "premtsimi2"), 3),
|
||||
],
|
||||
[
|
||||
(bt, 12),
|
||||
(functools.partial(createbtnexport, self), 12),
|
||||
],
|
||||
[],
|
||||
]
|
||||
@ -230,7 +246,7 @@ def setTabTwo_lazy(self):
|
||||
[
|
||||
("Chromium_路径", 8),
|
||||
(
|
||||
getcolorbutton(
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=functools.partial(
|
||||
@ -243,9 +259,9 @@ def setTabTwo_lazy(self):
|
||||
],
|
||||
[
|
||||
("端口号", 8),
|
||||
(getspinbox(0, 65535, globalconfig, "debugport"), 4),
|
||||
(D_getspinbox(0, 65535, globalconfig, "debugport"), 4),
|
||||
],
|
||||
[(self.statuslabel, 16)],
|
||||
[(functools.partial(createstatuslabel, self), 16)],
|
||||
[],
|
||||
]
|
||||
lixians, pre, mianfei, develop, shoufei = splittranslatortypes()
|
||||
@ -255,16 +271,23 @@ def setTabTwo_lazy(self):
|
||||
developgrid += initsome11(self, develop)
|
||||
online_reg_grid += initsome11(self, shoufei)
|
||||
pretransgrid += initsome11(self, pre)
|
||||
tab = makesubtab_lazy(
|
||||
vw, vl = getvboxwidget()
|
||||
basel.addWidget(vw)
|
||||
|
||||
gridlayoutwidget, do = makegrid(grids, delay=True)
|
||||
vl.addWidget(gridlayoutwidget)
|
||||
tab, dotab = makesubtab_lazy(
|
||||
["在线翻译", "develop", "注册在线翻译", "离线翻译", "预翻译"],
|
||||
[
|
||||
lambda: makescroll(makegrid(onlinegrid)),
|
||||
lambda: makescroll(makegrid(developgrid)),
|
||||
lambda: makescroll(makegrid(online_reg_grid)),
|
||||
lambda: makescroll(makegrid(offlinegrid)),
|
||||
lambda: makescroll(makegrid(pretransgrid)),
|
||||
functools.partial(makescrollgrid, onlinegrid),
|
||||
functools.partial(makescrollgrid, developgrid),
|
||||
functools.partial(makescrollgrid, online_reg_grid),
|
||||
functools.partial(makescrollgrid, offlinegrid),
|
||||
functools.partial(makescrollgrid, pretransgrid),
|
||||
],
|
||||
delay=True,
|
||||
)
|
||||
vl.addWidget(tab)
|
||||
|
||||
gridlayoutwidget = makegrid(grids)
|
||||
return makevbox([gridlayoutwidget, tab])
|
||||
do()
|
||||
dotab()
|
||||
|
@ -1,21 +1,20 @@
|
||||
import functools
|
||||
import functools, copy, os, gobject
|
||||
from qtsymbols import *
|
||||
from traceback import print_exc
|
||||
from myutils.config import (
|
||||
globalconfig,
|
||||
postprocessconfig,
|
||||
static_data,
|
||||
savehook_new_data,
|
||||
_TR,
|
||||
)
|
||||
import functools, gobject
|
||||
from gui.usefulwidget import (
|
||||
getcolorbutton,
|
||||
getsimpleswitch,
|
||||
makevbox,
|
||||
makescroll,
|
||||
makegrid,
|
||||
D_getcolorbutton,
|
||||
D_getsimpleswitch,
|
||||
makescrollgrid,
|
||||
getvboxwidget,
|
||||
makesubtab_lazy,
|
||||
tabadd_lazy,
|
||||
)
|
||||
from gui.codeacceptdialog import codeacceptdialog
|
||||
from gui.inputdialog import (
|
||||
@ -28,8 +27,6 @@ from myutils.utils import (
|
||||
checkpostlangmatch,
|
||||
loadpostsettingwindowmethod,
|
||||
)
|
||||
from myutils.config import savehook_new_data
|
||||
import copy, os
|
||||
from myutils.post import POSTSOLVE
|
||||
|
||||
|
||||
@ -67,12 +64,13 @@ def savegameprocesstext():
|
||||
print_exc()
|
||||
|
||||
|
||||
def settab7direct(self):
|
||||
self.comparelayout = getcomparelayout(self)
|
||||
|
||||
|
||||
def setTab7(self):
|
||||
tabadd_lazy(self.tab_widget, ("文本处理"), lambda: setTab7_lazy(self))
|
||||
def delaysetcomparetext(self, s):
|
||||
try:
|
||||
self.__fromtext.setPlainText(s)
|
||||
self.__totext.setPlainText(POSTSOLVE(s))
|
||||
except:
|
||||
self.__fromtext_cache = s
|
||||
self.__totext_cache = POSTSOLVE(s)
|
||||
|
||||
|
||||
def getcomparelayout(self):
|
||||
@ -93,16 +91,17 @@ def getcomparelayout(self):
|
||||
layout.addWidget(totext)
|
||||
w = QWidget()
|
||||
w.setLayout(layout)
|
||||
|
||||
def _(s):
|
||||
fromtext.setPlainText(s)
|
||||
totext.setPlainText(POSTSOLVE(fromtext.toPlainText()))
|
||||
|
||||
self.showandsolvesig.connect(_)
|
||||
self.__fromtext = fromtext
|
||||
self.__totext = totext
|
||||
try:
|
||||
fromtext.setPlainText(self.__fromtext_cache)
|
||||
totext.setPlainText(self.__totext_cache)
|
||||
except:
|
||||
pass
|
||||
return w
|
||||
|
||||
|
||||
def setTab7_lazy(self):
|
||||
def setTab7_lazy(self, basel):
|
||||
grids = [[("预处理方法", 6), "", "", ("调整执行顺序", 6)]]
|
||||
if set(postprocessconfig.keys()) != set(globalconfig["postprocess_rank"]):
|
||||
globalconfig["postprocess_rank"] = list(postprocessconfig.keys())
|
||||
@ -137,7 +136,7 @@ def setTab7_lazy(self):
|
||||
|
||||
for i, post in enumerate(sortlist):
|
||||
if post == "_11":
|
||||
config = getcolorbutton(
|
||||
config = D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=lambda: selectdebugfile("./userconfig/mypost.py"),
|
||||
@ -148,7 +147,7 @@ def setTab7_lazy(self):
|
||||
if post not in postprocessconfig:
|
||||
continue
|
||||
if post == "_remove_chaos":
|
||||
config = getcolorbutton(
|
||||
config = D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
icon="fa.gear",
|
||||
@ -172,7 +171,7 @@ def setTab7_lazy(self):
|
||||
600,
|
||||
items,
|
||||
)
|
||||
config = getcolorbutton(
|
||||
config = D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=callback,
|
||||
@ -182,14 +181,14 @@ def setTab7_lazy(self):
|
||||
else:
|
||||
config = ""
|
||||
|
||||
button_up = getcolorbutton(
|
||||
button_up = D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=functools.partial(changerank, post, True),
|
||||
icon="fa.arrow-up",
|
||||
constcolor="#FF69B4",
|
||||
)
|
||||
button_down = getcolorbutton(
|
||||
button_down = D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=functools.partial(changerank, post, False),
|
||||
@ -199,7 +198,7 @@ def setTab7_lazy(self):
|
||||
|
||||
l = [
|
||||
((postprocessconfig[post]["name"]), 6),
|
||||
getsimpleswitch(postprocessconfig[post], "use"),
|
||||
D_getsimpleswitch(postprocessconfig[post], "use"),
|
||||
config,
|
||||
button_up,
|
||||
button_down,
|
||||
@ -211,7 +210,7 @@ def setTab7_lazy(self):
|
||||
visname = item["visname"]
|
||||
if checkpostlangmatch(name):
|
||||
grids2.append(
|
||||
[((visname), 6), getsimpleswitch(globalconfig["transoptimi"], name)]
|
||||
[((visname), 6), D_getsimpleswitch(globalconfig["transoptimi"], name)]
|
||||
)
|
||||
setting = loadpostsettingwindowmethod(name)
|
||||
|
||||
@ -220,7 +219,7 @@ def setTab7_lazy(self):
|
||||
|
||||
if setting:
|
||||
grids2[-1].append(
|
||||
getcolorbutton(
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=functools.partial(__, setting, self),
|
||||
@ -230,8 +229,10 @@ def setTab7_lazy(self):
|
||||
)
|
||||
grids2 += [[("", 12)]]
|
||||
|
||||
def __():
|
||||
_w = makescroll(makegrid(grids, True, savelist, savelay))
|
||||
def ___(lay):
|
||||
vboxw, vbox = getvboxwidget()
|
||||
lay.addWidget(vboxw)
|
||||
_w = makescrollgrid(grids, vbox, True, savelist, savelay)
|
||||
_w.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
|
||||
|
||||
def showmenu(p: QPoint):
|
||||
@ -249,11 +250,13 @@ def setTab7_lazy(self):
|
||||
pass
|
||||
|
||||
_w.customContextMenuRequested.connect(showmenu)
|
||||
return _w
|
||||
|
||||
tab = makesubtab_lazy(
|
||||
vbox.addWidget(getcomparelayout(self))
|
||||
|
||||
tab, dotab = makesubtab_lazy(
|
||||
["文本预处理", "翻译优化"],
|
||||
[lambda: __(), lambda: makescroll(makegrid(grids2))],
|
||||
[___, functools.partial(makescrollgrid, grids2)],
|
||||
delay=True,
|
||||
)
|
||||
|
||||
return makevbox([tab, self.comparelayout])
|
||||
basel.addWidget(tab)
|
||||
dotab()
|
||||
|
@ -1,17 +1,15 @@
|
||||
from qtsymbols import *
|
||||
from gui.usefulwidget import (
|
||||
getsimpleswitch,
|
||||
getsimplecombobox,
|
||||
makegrid,
|
||||
makescroll,
|
||||
D_getsimpleswitch,
|
||||
D_getsimplecombobox,
|
||||
makescrollgrid,
|
||||
makesubtab_lazy,
|
||||
tabadd_lazy,
|
||||
)
|
||||
from myutils.config import globalconfig, _TR, static_data
|
||||
from myutils.wrapper import threader
|
||||
import platform, winsharedutils, sys, os
|
||||
from myutils.utils import makehtml, getimageformatlist
|
||||
from functools import partial
|
||||
import functools
|
||||
from myutils.githubupdate import updatemethod, getvesionmethod
|
||||
|
||||
|
||||
@ -19,6 +17,7 @@ from myutils.githubupdate import updatemethod, getvesionmethod
|
||||
def getversion(self):
|
||||
version = winsharedutils.queryversion(sys.argv[0])
|
||||
if version is None:
|
||||
self.versiontextsignal.emit("unknown")
|
||||
return
|
||||
versionstring = f"v{version[0]}.{version[1]}.{version[2]}"
|
||||
self.versiontextsignal.emit(
|
||||
@ -49,18 +48,15 @@ def getversion(self):
|
||||
|
||||
|
||||
def updateprogress(self, text, val):
|
||||
self.downloadprogress.setValue(val)
|
||||
self.downloadprogress.setFormat(text)
|
||||
try:
|
||||
self.downloadprogress.setValue(val)
|
||||
self.downloadprogress.setFormat(text)
|
||||
except:
|
||||
self.downloadprogress_cache = val, text
|
||||
|
||||
|
||||
def setTab_about_dicrect(self):
|
||||
def createdownloadprogress(self):
|
||||
|
||||
self.versionlabel = QLabel()
|
||||
self.versionlabel.setOpenExternalLinks(True)
|
||||
self.versionlabel.setTextInteractionFlags(
|
||||
Qt.TextInteractionFlag.LinksAccessibleByMouse
|
||||
)
|
||||
self.versiontextsignal.connect(lambda x: self.versionlabel.setText(x))
|
||||
self.downloadprogress = QProgressBar()
|
||||
|
||||
self.downloadprogress.setRange(0, 10000)
|
||||
@ -68,19 +64,37 @@ def setTab_about_dicrect(self):
|
||||
self.downloadprogress.setAlignment(
|
||||
Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter
|
||||
)
|
||||
self.progresssignal.connect(lambda text, val: updateprogress(self, text, val))
|
||||
getversion(self)
|
||||
try:
|
||||
val, text = self.downloadprogress_cache
|
||||
self.downloadprogress.setValue(val)
|
||||
self.downloadprogress.setFormat(text)
|
||||
except:
|
||||
pass
|
||||
return self.downloadprogress
|
||||
|
||||
|
||||
def setTab_about(self):
|
||||
tabadd_lazy(self.tab_widget, ("其他设置"), lambda: setTab_aboutlazy(self))
|
||||
def createversionlabel(self):
|
||||
|
||||
self.versionlabel = QLabel()
|
||||
self.versionlabel.setOpenExternalLinks(True)
|
||||
self.versionlabel.setTextInteractionFlags(
|
||||
Qt.TextInteractionFlag.LinksAccessibleByMouse
|
||||
)
|
||||
try:
|
||||
self.versionlabel.setText(self.versionlabel_cache)
|
||||
except:
|
||||
pass
|
||||
return self.versionlabel
|
||||
|
||||
|
||||
def double_(self, grid):
|
||||
return makescroll(makegrid(grid))
|
||||
def versionlabelmaybesettext(self, x):
|
||||
try:
|
||||
self.versionlabel.setText(x)
|
||||
except:
|
||||
self.versionlabel_cache = x
|
||||
|
||||
|
||||
def resourcegrid(self):
|
||||
def resourcegrid(self, l):
|
||||
titles = []
|
||||
makewidgetsfunctions = []
|
||||
for sourcetype in static_data["aboutsource"]:
|
||||
@ -106,11 +120,27 @@ def resourcegrid(self):
|
||||
else:
|
||||
__ = True
|
||||
grid.append([(_TR(name), 1, ""), (makehtml(link, __), 2, "link")])
|
||||
makewidgetsfunctions.append(partial(double_, self, grid))
|
||||
return makesubtab_lazy(titles, makewidgetsfunctions)
|
||||
makewidgetsfunctions.append(functools.partial(makescrollgrid, grid))
|
||||
tab, dotab = makesubtab_lazy(titles, makewidgetsfunctions, delay=True)
|
||||
l.addWidget(tab)
|
||||
dotab()
|
||||
|
||||
|
||||
def setTab_aboutlazy(self):
|
||||
def createimageview(self):
|
||||
lb = QLabel()
|
||||
img = QPixmap.fromImage(QImage("./files/zan.jpg"))
|
||||
img.setDevicePixelRatio(self.devicePixelRatioF())
|
||||
img = img.scaled(
|
||||
600,
|
||||
600,
|
||||
Qt.AspectRatioMode.KeepAspectRatio,
|
||||
Qt.TransformationMode.SmoothTransformation,
|
||||
)
|
||||
lb.setPixmap(img)
|
||||
return lb
|
||||
|
||||
|
||||
def setTab_aboutlazy(self, basel):
|
||||
webviews = ["IEFrame", "WebView2"]
|
||||
if os.path.exists("./LunaTranslator/runtime/PyQt5/Qt5/bin/Qt5WebEngineCore.dll"):
|
||||
webviews.append("QWebEngine")
|
||||
@ -118,22 +148,22 @@ def setTab_aboutlazy(self):
|
||||
[
|
||||
("自动下载更新(需要连接github)", 5),
|
||||
(
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig, "autoupdate", callback=lambda x: getversion(self)
|
||||
),
|
||||
1,
|
||||
),
|
||||
("", 10),
|
||||
],
|
||||
[(self.versionlabel, 10)],
|
||||
[(self.downloadprogress, 10)],
|
||||
[(functools.partial(createversionlabel, self), 10)],
|
||||
[(functools.partial(createdownloadprogress, self), 10)],
|
||||
[],
|
||||
[("Internet", 5)],
|
||||
[(getsimplecombobox(["winhttp", "libcurl"], globalconfig, "network"), 5)],
|
||||
[("WebView", 5)],
|
||||
[("网络请求", -1)],
|
||||
[(D_getsimplecombobox(["winhttp", "libcurl"], globalconfig, "network"), 5)],
|
||||
[("网页显示", -1)],
|
||||
[
|
||||
(
|
||||
getsimplecombobox(
|
||||
D_getsimplecombobox(
|
||||
webviews,
|
||||
globalconfig,
|
||||
"usewebview",
|
||||
@ -141,8 +171,8 @@ def setTab_aboutlazy(self):
|
||||
5,
|
||||
)
|
||||
],
|
||||
[("截图保存格式", 5)],
|
||||
[(getsimplecombobox(getimageformatlist(), globalconfig, "imageformat"), 5)],
|
||||
[("截图保存格式", -1)],
|
||||
[(D_getsimplecombobox(getimageformatlist(), globalconfig, "imageformat"), 5)],
|
||||
]
|
||||
|
||||
shuominggrid = [
|
||||
@ -170,19 +200,10 @@ def setTab_aboutlazy(self):
|
||||
(makehtml("https://qm.qq.com/q/qE32v9NYBO", show=912525396), 3, "link"),
|
||||
],
|
||||
[],
|
||||
[("如果你感觉该软件对你有帮助,欢迎微信扫码赞助,谢谢~", 0)],
|
||||
[("如果你感觉该软件对你有帮助,欢迎微信扫码赞助,谢谢~", -1)],
|
||||
]
|
||||
lb = QLabel(self)
|
||||
img = QPixmap.fromImage(QImage("./files/zan.jpg"))
|
||||
img.setDevicePixelRatio(self.devicePixelRatioF())
|
||||
img = img.scaled(
|
||||
600,
|
||||
600,
|
||||
Qt.AspectRatioMode.KeepAspectRatio,
|
||||
Qt.TransformationMode.SmoothTransformation,
|
||||
)
|
||||
lb.setPixmap(img)
|
||||
shuominggrid += [[(lb, 0)]]
|
||||
|
||||
shuominggrid += [[(functools.partial(createimageview, self), -1)]]
|
||||
else:
|
||||
shuominggrid += [
|
||||
[],
|
||||
@ -202,14 +223,14 @@ def setTab_aboutlazy(self):
|
||||
],
|
||||
]
|
||||
|
||||
tab = makesubtab_lazy(
|
||||
tab, dotab = makesubtab_lazy(
|
||||
["相关说明", "其他设置", "资源下载"],
|
||||
[
|
||||
lambda: makescroll(
|
||||
makegrid(shuominggrid),
|
||||
),
|
||||
lambda: makescroll(makegrid(grid2)),
|
||||
lambda: resourcegrid(self),
|
||||
functools.partial(makescrollgrid, shuominggrid),
|
||||
functools.partial(makescrollgrid, grid2),
|
||||
functools.partial(resourcegrid, self),
|
||||
],
|
||||
delay=True,
|
||||
)
|
||||
return tab
|
||||
basel.addWidget(tab)
|
||||
dotab()
|
||||
|
@ -2,19 +2,17 @@ import functools, os
|
||||
from myutils.config import globalconfig, _TRL
|
||||
from gui.inputdialog import autoinitdialog, autoinitdialog_items
|
||||
from gui.usefulwidget import (
|
||||
getcolorbutton,
|
||||
D_getcolorbutton,
|
||||
yuitsu_switch,
|
||||
makescroll,
|
||||
makegrid,
|
||||
tabadd_lazy,
|
||||
getsimpleswitch,
|
||||
getsimplecombobox,
|
||||
makescrollgrid,
|
||||
D_getsimpleswitch,
|
||||
D_getsimplecombobox,
|
||||
)
|
||||
import gobject
|
||||
|
||||
|
||||
def setTabcishu(self):
|
||||
tabadd_lazy(self.tab_widget, ("辞书设置"), lambda: setTabcishu_l(self))
|
||||
def setTabcishu(self, basel):
|
||||
makescrollgrid(setTabcishu_l(self), basel)
|
||||
|
||||
|
||||
def gethiragrid(self):
|
||||
@ -31,7 +29,7 @@ def gethiragrid(self):
|
||||
if "args" in globalconfig["hirasetting"][name]:
|
||||
items = autoinitdialog_items(globalconfig["hirasetting"][name])
|
||||
items[-1]["callback"] = gobject.baseobject.starthira
|
||||
_3 = getcolorbutton(
|
||||
_3 = D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=functools.partial(
|
||||
@ -51,7 +49,7 @@ def gethiragrid(self):
|
||||
line += [
|
||||
((globalconfig["hirasetting"][name]["name"]), 6),
|
||||
(
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig["hirasetting"][name],
|
||||
"use",
|
||||
name=name,
|
||||
@ -85,11 +83,11 @@ def setTabcishu_l(self):
|
||||
|
||||
grids = (
|
||||
[
|
||||
[("分词&假名分析器", 10)],
|
||||
[("分词&假名分析器", -1)],
|
||||
[
|
||||
("日语注音方案", 6),
|
||||
(
|
||||
getsimplecombobox(
|
||||
D_getsimplecombobox(
|
||||
_TRL(["平假名", "片假名", "罗马音"]),
|
||||
globalconfig,
|
||||
"hira_vis_type",
|
||||
@ -104,8 +102,8 @@ def setTabcishu_l(self):
|
||||
[],
|
||||
[
|
||||
("点击单词查词", 6),
|
||||
(getsimpleswitch(globalconfig, "usesearchword"), 1),
|
||||
getcolorbutton(
|
||||
(D_getsimpleswitch(globalconfig, "usesearchword"), 1),
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=lambda: gobject.baseobject.searchwordW.showsignal.emit(),
|
||||
@ -114,14 +112,14 @@ def setTabcishu_l(self):
|
||||
),
|
||||
"",
|
||||
("点击单词复制", 6),
|
||||
(getsimpleswitch(globalconfig, "usecopyword"), 1),
|
||||
(D_getsimpleswitch(globalconfig, "usecopyword"), 1),
|
||||
],
|
||||
[
|
||||
("使用原型查询", 6),
|
||||
(getsimpleswitch(globalconfig, "usewordorigin"), 1),
|
||||
(D_getsimpleswitch(globalconfig, "usewordorigin"), 1),
|
||||
],
|
||||
[],
|
||||
[("辞书", 10)],
|
||||
[("辞书", -1)],
|
||||
]
|
||||
)
|
||||
|
||||
@ -138,12 +136,12 @@ def setTabcishu_l(self):
|
||||
)
|
||||
line += [
|
||||
(globalconfig["cishu"][cishu]["name"], 6),
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig["cishu"][cishu],
|
||||
"use",
|
||||
callback=functools.partial(gobject.baseobject.startxiaoxueguan, cishu),
|
||||
),
|
||||
getcolorbutton(
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=functools.partial(
|
||||
@ -166,8 +164,4 @@ def setTabcishu_l(self):
|
||||
i += 1
|
||||
if len(line):
|
||||
grids.append(line)
|
||||
|
||||
gridlayoutwidget = makegrid(grids)
|
||||
gridlayoutwidget = makescroll(gridlayoutwidget)
|
||||
|
||||
return gridlayoutwidget
|
||||
return grids
|
||||
|
@ -1,17 +1,28 @@
|
||||
import functools, os
|
||||
from myutils.config import globalconfig, ocrsetting, _TRL, ocrerrorfix
|
||||
from gui.usefulwidget import (
|
||||
getsimplecombobox,
|
||||
getspinbox,
|
||||
getcolorbutton,
|
||||
D_getsimplecombobox,
|
||||
D_getspinbox,
|
||||
D_getcolorbutton,
|
||||
yuitsu_switch,
|
||||
getsimpleswitch,
|
||||
D_getsimpleswitch,
|
||||
selectcolor,
|
||||
)
|
||||
from qtsymbols import *
|
||||
from gui.inputdialog import autoinitdialog, postconfigdialog, autoinitdialog_items
|
||||
import gobject
|
||||
|
||||
|
||||
def __label1(self):
|
||||
self.threshold1label = QLabel()
|
||||
return self.threshold1label
|
||||
|
||||
|
||||
def __label2(self):
|
||||
self.threshold2label = QLabel()
|
||||
return self.threshold2label
|
||||
|
||||
|
||||
def getocrgrid(self):
|
||||
|
||||
grids = []
|
||||
@ -26,7 +37,7 @@ def getocrgrid(self):
|
||||
continue
|
||||
if name in ocrsetting:
|
||||
items = autoinitdialog_items(ocrsetting[name])
|
||||
_3 = getcolorbutton(
|
||||
_3 = D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=functools.partial(
|
||||
@ -42,7 +53,7 @@ def getocrgrid(self):
|
||||
line += [
|
||||
((globalconfig["ocr"][name]["name"]), 6),
|
||||
(
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig["ocr"][name],
|
||||
"use",
|
||||
name=name,
|
||||
@ -72,13 +83,13 @@ def getocrgrid(self):
|
||||
|
||||
grids += [
|
||||
[],
|
||||
[(("竖向OCR识别"), 12), getsimpleswitch(globalconfig, "verticalocr")],
|
||||
[(("合并多行识别结果"), 12), getsimpleswitch(globalconfig, "ocrmergelines")],
|
||||
[(("竖向OCR识别"), 12), D_getsimpleswitch(globalconfig, "verticalocr")],
|
||||
[(("合并多行识别结果"), 12), D_getsimpleswitch(globalconfig, "ocrmergelines")],
|
||||
[],
|
||||
[
|
||||
("OCR预处理方法", 8),
|
||||
(
|
||||
getsimplecombobox(
|
||||
D_getsimplecombobox(
|
||||
_TRL(["不处理", "灰度化", "阈值二值化", "OTSU二值化"]),
|
||||
globalconfig,
|
||||
"ocr_presolve_method",
|
||||
@ -89,22 +100,22 @@ def getocrgrid(self):
|
||||
],
|
||||
[
|
||||
("查看处理效果", 6),
|
||||
getcolorbutton(
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
gobject.baseobject.createshowocrimage,
|
||||
icon="fa.picture-o",
|
||||
constcolor="#FF69B4",
|
||||
callback=gobject.baseobject.showocrimage.showsignal.emit,
|
||||
),
|
||||
"",
|
||||
(("二值化阈值"), 8),
|
||||
(getspinbox(0, 255, globalconfig, "binary_thresh"), 4),
|
||||
(D_getspinbox(0, 255, globalconfig, "binary_thresh"), 4),
|
||||
],
|
||||
[],
|
||||
[
|
||||
("OCR自动化方法", 8),
|
||||
(
|
||||
getsimplecombobox(
|
||||
D_getsimplecombobox(
|
||||
_TRL(["分析图像更新", "周期执行", "分析图像更新+周期执行"]),
|
||||
globalconfig,
|
||||
"ocr_auto_method",
|
||||
@ -115,7 +126,7 @@ def getocrgrid(self):
|
||||
[
|
||||
(("执行周期(s)"), 8),
|
||||
(
|
||||
getspinbox(
|
||||
D_getspinbox(
|
||||
0.1, 100, globalconfig, "ocr_interval", double=True, step=0.1
|
||||
),
|
||||
4,
|
||||
@ -124,35 +135,35 @@ def getocrgrid(self):
|
||||
[
|
||||
(("图像稳定性阈值"), 8),
|
||||
(
|
||||
getspinbox(
|
||||
D_getspinbox(
|
||||
0, 1, globalconfig, "ocr_stable_sim", double=True, step=0.01, dec=3
|
||||
),
|
||||
4,
|
||||
),
|
||||
(self.threshold1label, 4),
|
||||
(functools.partial(__label1, self), 0),
|
||||
],
|
||||
[
|
||||
(("图像一致性阈值"), 8),
|
||||
(
|
||||
getspinbox(
|
||||
D_getspinbox(
|
||||
0, 1, globalconfig, "ocr_diff_sim", double=True, step=0.01, dec=3
|
||||
),
|
||||
4,
|
||||
),
|
||||
(self.threshold2label, 4),
|
||||
(functools.partial(__label2, self), 0),
|
||||
],
|
||||
[
|
||||
(("文本相似度阈值"), 8),
|
||||
(getspinbox(0, 100000, globalconfig, "ocr_text_diff"), 4),
|
||||
(D_getspinbox(0, 100000, globalconfig, "ocr_text_diff"), 4),
|
||||
],
|
||||
[],
|
||||
[(("多重区域模式"), 12), getsimpleswitch(globalconfig, "multiregion")],
|
||||
[(("记忆选定区域"), 12), getsimpleswitch(globalconfig, "rememberocrregions")],
|
||||
[(("多重区域模式"), 12), D_getsimpleswitch(globalconfig, "multiregion")],
|
||||
[(("记忆选定区域"), 12), D_getsimpleswitch(globalconfig, "rememberocrregions")],
|
||||
[],
|
||||
[
|
||||
(("OCR范围框颜色"), 12),
|
||||
(
|
||||
getcolorbutton(
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"ocrrangecolor",
|
||||
callback=lambda: selectcolor(
|
||||
@ -171,7 +182,7 @@ def getocrgrid(self):
|
||||
[
|
||||
(("OCR范围框宽度"), 12),
|
||||
(
|
||||
getspinbox(
|
||||
D_getspinbox(
|
||||
1,
|
||||
100,
|
||||
globalconfig,
|
||||
@ -183,16 +194,16 @@ def getocrgrid(self):
|
||||
],
|
||||
[
|
||||
(("选取OCR范围后立即进行一次识别"), 12),
|
||||
getsimpleswitch(globalconfig, "ocrafterrangeselect"),
|
||||
D_getsimpleswitch(globalconfig, "ocrafterrangeselect"),
|
||||
],
|
||||
[
|
||||
(("选取OCR范围后显示范围框"), 12),
|
||||
getsimpleswitch(globalconfig, "showrangeafterrangeselect"),
|
||||
D_getsimpleswitch(globalconfig, "showrangeafterrangeselect"),
|
||||
],
|
||||
[
|
||||
(("OCR识别易错内容修正"), 12),
|
||||
getsimpleswitch(ocrerrorfix, "use"),
|
||||
getcolorbutton(
|
||||
D_getsimpleswitch(ocrerrorfix, "use"),
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=functools.partial(
|
||||
|
@ -2,27 +2,40 @@ import functools
|
||||
from myutils.config import globalconfig, _TR
|
||||
from myutils.winsyshotkey import SystemHotkey, registerException
|
||||
import winsharedutils
|
||||
import gobject, windows
|
||||
import gobject, windows, functools
|
||||
from qtsymbols import *
|
||||
from gui.usefulwidget import (
|
||||
getsimpleswitch,
|
||||
getsimplekeyseq,
|
||||
makegrid,
|
||||
tabadd_lazy,
|
||||
makescroll,
|
||||
D_getsimpleswitch,
|
||||
D_getsimplekeyseq,
|
||||
makescrollgrid,
|
||||
)
|
||||
from myutils.hwnd import grabwindow
|
||||
from myutils.utils import getimageformat, parsekeystringtomodvkcode, unsupportkey
|
||||
|
||||
|
||||
def setTab_quick_direct(self):
|
||||
def delaycreatereferlabels(self, name):
|
||||
referlabel = QLabel()
|
||||
self.referlabels[name] = referlabel
|
||||
try:
|
||||
referlabel.setText(self.referlabels_data[name])
|
||||
except:
|
||||
pass
|
||||
return referlabel
|
||||
|
||||
|
||||
def maybesetreferlabels(self, name, text):
|
||||
try:
|
||||
self.referlabels[name].setText(text)
|
||||
except:
|
||||
self.referlabels_data[name] = text
|
||||
|
||||
|
||||
def registrhotkeys(self):
|
||||
self.hotkeymanager = SystemHotkey()
|
||||
self.referlabels = {}
|
||||
self.referlabels_data = {}
|
||||
self.registok = {}
|
||||
self.bindfunctions = {
|
||||
"_A": lambda: gobject.baseobject.settin_ui.clicksourcesignal.emit("copy"),
|
||||
"_B": lambda: gobject.baseobject.settin_ui.clicksourcesignal.emit("ocr"),
|
||||
"_C": lambda: gobject.baseobject.settin_ui.clicksourcesignal.emit("texthook"),
|
||||
"_1": gobject.baseobject.translation_ui.startTranslater,
|
||||
"_2": gobject.baseobject.translation_ui.changeTranslateMode,
|
||||
"_3": self.showsignal.emit,
|
||||
@ -33,7 +46,7 @@ def setTab_quick_direct(self):
|
||||
"_8": lambda: gobject.baseobject.translation_ui.changemousetransparentstate(0),
|
||||
"_9": gobject.baseobject.translation_ui.changetoolslockstate,
|
||||
"_10": lambda: gobject.baseobject.translation_ui.showsavegame_signal.emit(),
|
||||
"_11": lambda: gobject.baseobject.AttachProcessDialog.showsignal.emit(),
|
||||
"_11": gobject.baseobject.createattachprocess,
|
||||
"_12": lambda: gobject.baseobject.hookselectdialog.showsignal.emit(),
|
||||
"_13": lambda: gobject.baseobject.translation_ui.clickRange_signal.emit(False),
|
||||
"_14": gobject.baseobject.translation_ui.showhide_signal.emit,
|
||||
@ -52,18 +65,19 @@ def setTab_quick_direct(self):
|
||||
),
|
||||
"_26": gobject.baseobject.translation_ui.ocr_once_signal.emit,
|
||||
"_27": gobject.baseobject.translation_ui.simulate_key_enter,
|
||||
"_28": lambda: winsharedutils.clipboard_set(
|
||||
gobject.baseobject.currenttranslate
|
||||
),
|
||||
}
|
||||
for name in globalconfig["quick_setting"]["all"]:
|
||||
if name not in self.bindfunctions:
|
||||
continue
|
||||
referlabel = QLabel()
|
||||
self.referlabels[name] = referlabel
|
||||
regist_or_not_key(self, name)
|
||||
|
||||
|
||||
def setTab_quick(self):
|
||||
def setTab_quick(self, l):
|
||||
|
||||
tabadd_lazy(self.tab_widget, ("快捷按键"), lambda: setTab_quick_lazy(self))
|
||||
makescrollgrid(setTab_quick_lazy(self), l)
|
||||
|
||||
|
||||
def setTab_quick_lazy(self):
|
||||
@ -71,7 +85,7 @@ def setTab_quick_lazy(self):
|
||||
grids = [
|
||||
[
|
||||
(("是否使用快捷键"), 4),
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig["quick_setting"],
|
||||
"use",
|
||||
callback=functools.partial(__enable, self),
|
||||
@ -86,26 +100,23 @@ def setTab_quick_lazy(self):
|
||||
grids.append(
|
||||
[
|
||||
((globalconfig["quick_setting"]["all"][name]["name"]), 4),
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig["quick_setting"]["all"][name],
|
||||
"use",
|
||||
callback=functools.partial(fanyiselect, self, name),
|
||||
),
|
||||
(
|
||||
getsimplekeyseq(
|
||||
D_getsimplekeyseq(
|
||||
globalconfig["quick_setting"]["all"][name],
|
||||
"keystring",
|
||||
functools.partial(regist_or_not_key, self, name),
|
||||
),
|
||||
2,
|
||||
),
|
||||
(self.referlabels[name], 4),
|
||||
(functools.partial(delaycreatereferlabels, self, name), 4),
|
||||
]
|
||||
)
|
||||
gridlayoutwidget = makegrid(grids)
|
||||
gridlayoutwidget = makescroll(gridlayoutwidget)
|
||||
return gridlayoutwidget
|
||||
# self.yitiaolong("快捷按键",grids)
|
||||
return grids
|
||||
|
||||
|
||||
def __enable(self, x):
|
||||
@ -120,7 +131,7 @@ def fanyiselect(self, who, checked):
|
||||
|
||||
|
||||
def regist_or_not_key(self, name):
|
||||
self.referlabels[name].setText("")
|
||||
maybesetreferlabels(self, name, "")
|
||||
|
||||
if name in self.registok:
|
||||
self.hotkeymanager.unregister(self.registok[name])
|
||||
@ -137,11 +148,11 @@ def regist_or_not_key(self, name):
|
||||
try:
|
||||
mode, vkcode = parsekeystringtomodvkcode(keystring)
|
||||
except unsupportkey as e:
|
||||
self.referlabels[name].setText(_TR("不支持的键位") + ",".join(e.args[0]))
|
||||
maybesetreferlabels(self, name, _TR("不支持的键位") + ",".join(e.args[0]))
|
||||
return
|
||||
|
||||
try:
|
||||
self.hotkeymanager.register((mode, vkcode), callback=self.bindfunctions[name])
|
||||
self.registok[name] = (mode, vkcode)
|
||||
except registerException:
|
||||
self.referlabels[name].setText(_TR("快捷键冲突"))
|
||||
maybesetreferlabels(self, name, _TR("快捷键冲突"))
|
||||
|
@ -5,25 +5,50 @@ from myutils.config import globalconfig, _TRL
|
||||
import os, functools
|
||||
import gobject
|
||||
from gui.usefulwidget import (
|
||||
getsimplecombobox,
|
||||
getspinbox,
|
||||
makegrid,
|
||||
makescroll,
|
||||
getcolorbutton,
|
||||
tabadd_lazy,
|
||||
D_getsimplecombobox,
|
||||
D_getspinbox,
|
||||
makescrollgrid,
|
||||
D_getcolorbutton,
|
||||
yuitsu_switch,
|
||||
getsimpleswitch,
|
||||
D_getsimpleswitch,
|
||||
)
|
||||
|
||||
|
||||
def setTab5_direct(self):
|
||||
def showvoicelist(self, vl, idx):
|
||||
try:
|
||||
self.voicecombo.blockSignals(True)
|
||||
self.voicecombo.clear()
|
||||
self.voicecombo.addItems(vl)
|
||||
if idx >= 0:
|
||||
self.voicecombo.setCurrentIndex(idx)
|
||||
self.voicecombo.blockSignals(False)
|
||||
except:
|
||||
self.voicecombo_cache = vl, idx
|
||||
|
||||
|
||||
def changevoice(self, text):
|
||||
|
||||
globalconfig["reader"][gobject.baseobject.reader_usevoice]["voice"] = (
|
||||
gobject.baseobject.reader.voicelist[self.voicecombo.currentIndex()]
|
||||
)
|
||||
|
||||
|
||||
def createvoicecombo(self):
|
||||
|
||||
self.voicecombo = QComboBox()
|
||||
self.voicelistsignal.connect(functools.partial(showvoicelist, self))
|
||||
self.voicecombo.currentTextChanged.connect(lambda x: changevoice(self, x))
|
||||
try:
|
||||
vl, idx = self.voicecombo_cache
|
||||
self.voicecombo.addItems(vl)
|
||||
if idx >= 0:
|
||||
self.voicecombo.setCurrentIndex(idx)
|
||||
except:
|
||||
pass
|
||||
return self.voicecombo
|
||||
|
||||
|
||||
def setTab5(self):
|
||||
tabadd_lazy(self.tab_widget, ("语音合成"), lambda: setTab5lz(self))
|
||||
def setTab5(self, l):
|
||||
makescrollgrid(setTab5lz(self), l)
|
||||
|
||||
|
||||
def getttsgrid(self):
|
||||
@ -40,7 +65,7 @@ def getttsgrid(self):
|
||||
if "args" in globalconfig["reader"][name]:
|
||||
items = autoinitdialog_items(globalconfig["reader"][name])
|
||||
items[-1]["callback"] = gobject.baseobject.startreader
|
||||
_3 = getcolorbutton(
|
||||
_3 = D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=functools.partial(
|
||||
@ -60,7 +85,7 @@ def getttsgrid(self):
|
||||
line += [
|
||||
((globalconfig["reader"][name]["name"]), 6),
|
||||
(
|
||||
getsimpleswitch(
|
||||
D_getsimpleswitch(
|
||||
globalconfig["reader"][name],
|
||||
"use",
|
||||
name=name,
|
||||
@ -95,29 +120,29 @@ def setTab5lz(self):
|
||||
grids = getttsgrid(self)
|
||||
grids += [
|
||||
[],
|
||||
[("选择声音", 6), (self.voicecombo, 15)],
|
||||
[("选择声音", 6), (functools.partial(createvoicecombo, self), 15)],
|
||||
[
|
||||
("语速:(-10~10)", 6),
|
||||
(getspinbox(-10, 10, globalconfig["ttscommon"], "rate"), 3),
|
||||
(D_getspinbox(-10, 10, globalconfig["ttscommon"], "rate"), 3),
|
||||
],
|
||||
[
|
||||
("音量:(0~100)", 6),
|
||||
(getspinbox(0, 100, globalconfig["ttscommon"], "volume"), 3),
|
||||
(D_getspinbox(0, 100, globalconfig["ttscommon"], "volume"), 3),
|
||||
],
|
||||
[("自动朗读", 6), (getsimpleswitch(globalconfig, "autoread"), 1)],
|
||||
[("不被打断", 6), (getsimpleswitch(globalconfig, "ttsnointerrupt"), 1)],
|
||||
[("自动朗读", 6), (D_getsimpleswitch(globalconfig, "autoread"), 1)],
|
||||
[("不被打断", 6), (D_getsimpleswitch(globalconfig, "ttsnointerrupt"), 1)],
|
||||
[
|
||||
("朗读原文", 6),
|
||||
(getsimpleswitch(globalconfig, "read_raw"), 1),
|
||||
(D_getsimpleswitch(globalconfig, "read_raw"), 1),
|
||||
"",
|
||||
"",
|
||||
("朗读翻译", 6),
|
||||
(getsimpleswitch(globalconfig, "read_trans"), 1),
|
||||
(D_getsimpleswitch(globalconfig, "read_trans"), 1),
|
||||
],
|
||||
[
|
||||
("朗读的翻译", 6),
|
||||
(
|
||||
getsimplecombobox(
|
||||
D_getsimplecombobox(
|
||||
_TRL(
|
||||
[
|
||||
globalconfig["fanyi"][x]["name"]
|
||||
@ -133,8 +158,8 @@ def setTab5lz(self):
|
||||
[],
|
||||
[
|
||||
("语音修正", 6),
|
||||
getsimpleswitch(globalconfig["ttscommon"], "tts_repair"),
|
||||
getcolorbutton(
|
||||
D_getsimpleswitch(globalconfig["ttscommon"], "tts_repair"),
|
||||
D_getcolorbutton(
|
||||
globalconfig,
|
||||
"",
|
||||
callback=lambda x: noundictconfigdialog1(
|
||||
@ -149,22 +174,4 @@ def setTab5lz(self):
|
||||
),
|
||||
],
|
||||
]
|
||||
gridlayoutwidget = makegrid(grids)
|
||||
gridlayoutwidget = makescroll(gridlayoutwidget)
|
||||
return gridlayoutwidget
|
||||
|
||||
|
||||
def changevoice(self, text):
|
||||
|
||||
globalconfig["reader"][gobject.baseobject.reader_usevoice]["voice"] = (
|
||||
gobject.baseobject.reader.voicelist[self.voicecombo.currentIndex()]
|
||||
)
|
||||
|
||||
|
||||
def showvoicelist(self, vl, idx):
|
||||
self.voicecombo.blockSignals(True)
|
||||
self.voicecombo.clear()
|
||||
self.voicecombo.addItems(vl)
|
||||
if idx >= 0:
|
||||
self.voicecombo.setCurrentIndex(idx)
|
||||
self.voicecombo.blockSignals(False)
|
||||
return grids
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,18 +1,23 @@
|
||||
from qtsymbols import *
|
||||
import qtawesome
|
||||
import qtawesome, gobject
|
||||
from myutils.ocrutil import imagesolve
|
||||
from gui.usefulwidget import closeashidewindow
|
||||
from gui.usefulwidget import saveposwindow
|
||||
from myutils.config import globalconfig, _TR
|
||||
from myutils.config import globalconfig
|
||||
from myutils.wrapper import Singleton_close
|
||||
|
||||
|
||||
class showocrimage(closeashidewindow):
|
||||
@Singleton_close
|
||||
class showocrimage(saveposwindow):
|
||||
setimage = pyqtSignal(list)
|
||||
|
||||
def __init__(self, parent):
|
||||
def closeEvent(self, e):
|
||||
gobject.baseobject.showocrimage = None
|
||||
super().closeEvent(e)
|
||||
|
||||
def __init__(self, parent, cached):
|
||||
self.img1 = None
|
||||
self.originimage = None
|
||||
super(showocrimage, self).__init__(parent, globalconfig, "showocrgeo")
|
||||
super().__init__(parent, globalconfig, "showocrgeo")
|
||||
self.setWindowIcon(qtawesome.icon("fa.picture-o"))
|
||||
self.setWindowTitle(_TR("查看处理效果"))
|
||||
self.originlabel = QLabel(self)
|
||||
@ -32,6 +37,8 @@ class showocrimage(closeashidewindow):
|
||||
self.layout1.addWidget(button)
|
||||
self.layout1.addWidget(self.solvedlabel)
|
||||
self.setimage.connect(self.setimagefunction)
|
||||
if cached:
|
||||
self.setimagefunction(cached)
|
||||
|
||||
def retest(self):
|
||||
if self.originimage is None:
|
||||
|
@ -192,14 +192,14 @@ class AnkiWindow(QWidget):
|
||||
html = f'<style>{model_css}</style><div class="card">{html}</div>'
|
||||
self.htmlbrowser.setHtml(html)
|
||||
|
||||
def creattemplatetab(self):
|
||||
def creattemplatetab(self, baselay):
|
||||
|
||||
layout = QHBoxLayout()
|
||||
layout.setContentsMargins(0, 0, 0, 0)
|
||||
layout.setSpacing(0)
|
||||
wid = QWidget()
|
||||
wid.setLayout(layout)
|
||||
|
||||
baselay.addWidget(wid)
|
||||
edittemptab = QTabWidget()
|
||||
self.previewtab = QTabBar()
|
||||
revertbtn = QPushButton(_TR("恢复"))
|
||||
@ -241,7 +241,6 @@ class AnkiWindow(QWidget):
|
||||
self.backtext.textChanged.connect(lambda: self.refreshhtml.emit())
|
||||
self.csstext.textChanged.connect(lambda: self.refreshhtml.emit())
|
||||
self.previewtab.currentChanged.connect(lambda: self.refreshhtml.emit())
|
||||
return wid
|
||||
|
||||
def loadedits(self):
|
||||
for text, object in zip(
|
||||
@ -335,10 +334,11 @@ class AnkiWindow(QWidget):
|
||||
with open("userconfig/anki/style.css", "w", encoding="utf8") as ff:
|
||||
ff.write(model_css)
|
||||
|
||||
def creatsetdtab(self):
|
||||
def creatsetdtab(self, baselay):
|
||||
layout = QFormLayout()
|
||||
wid = QWidget()
|
||||
wid.setLayout(layout)
|
||||
baselay.addWidget(wid)
|
||||
layout.addRow(
|
||||
_TR("端口号"), getspinbox(0, 65536, globalconfig["ankiconnect"], "port")
|
||||
)
|
||||
@ -409,7 +409,6 @@ class AnkiWindow(QWidget):
|
||||
makewidget=True,
|
||||
),
|
||||
)
|
||||
return wid
|
||||
|
||||
@threader
|
||||
def simulate_key(self, i):
|
||||
|
@ -220,7 +220,6 @@ class Textbrowser(QLabel):
|
||||
|
||||
def __init__(self, parent):
|
||||
super().__init__(parent)
|
||||
|
||||
self.setMouseTracking(True)
|
||||
|
||||
self.atback2 = QLabel(parent)
|
||||
|
@ -2,6 +2,7 @@ from qtsymbols import *
|
||||
import qtawesome, functools, winsharedutils
|
||||
from gui.usefulwidget import closeashidewindow
|
||||
from myutils.config import globalconfig, _TR
|
||||
from myutils.utils import get_time_stamp
|
||||
|
||||
|
||||
class transhist(closeashidewindow):
|
||||
@ -17,6 +18,7 @@ class transhist(closeashidewindow):
|
||||
self.getnewtranssignal.connect(self.getnewtrans)
|
||||
self.hiderawflag = False
|
||||
self.hideapiflag = False
|
||||
self.hidetime = True
|
||||
|
||||
self.setWindowTitle(_TR("历史翻译"))
|
||||
|
||||
@ -45,6 +47,7 @@ class transhist(closeashidewindow):
|
||||
copy = QAction(_TR("复制到剪贴板"))
|
||||
hideshowraw = QAction(_TR("显示原文" if self.hiderawflag else "不显示原文"))
|
||||
hideshowapi = QAction(_TR("显示api" if self.hideapiflag else "不显示api"))
|
||||
hidetime = QAction(_TR("显示时间" if self.hidetime else "不显示时间"))
|
||||
menu.addAction(qingkong)
|
||||
menu.addAction(baocun)
|
||||
if len(self.textOutput.textCursor().selectedText()):
|
||||
@ -52,6 +55,7 @@ class transhist(closeashidewindow):
|
||||
if flag == 1:
|
||||
menu.addAction(hideshowraw)
|
||||
menu.addAction(hideshowapi)
|
||||
menu.addAction(hidetime)
|
||||
|
||||
action = menu.exec(QCursor.pos())
|
||||
if action == qingkong:
|
||||
@ -67,20 +71,27 @@ class transhist(closeashidewindow):
|
||||
elif action == hideshowraw:
|
||||
|
||||
self.hiderawflag = not self.hiderawflag
|
||||
elif action == hidetime:
|
||||
|
||||
self.hidetime = not self.hidetime
|
||||
elif action == hideshowapi:
|
||||
|
||||
self.hideapiflag = not self.hideapiflag
|
||||
|
||||
def getnewsentence(self, sentence):
|
||||
|
||||
sentence = "\n" + sentence
|
||||
if self.hiderawflag:
|
||||
sentence = ""
|
||||
else:
|
||||
if not self.hidetime:
|
||||
sentence = get_time_stamp() + " " + sentence
|
||||
sentence = "\n" + sentence
|
||||
self.textOutput.appendPlainText(sentence)
|
||||
|
||||
def getnewtrans(self, api, sentence):
|
||||
if self.hideapiflag:
|
||||
res = sentence
|
||||
else:
|
||||
res = api + " " + sentence
|
||||
self.textOutput.appendPlainText(res)
|
||||
if not self.hideapiflag:
|
||||
sentence = api + " " + sentence
|
||||
if not self.hidetime:
|
||||
sentence = get_time_stamp() + " " + sentence
|
||||
|
||||
self.textOutput.appendPlainText(sentence)
|
||||
|
@ -130,7 +130,7 @@ class QUnFrameWindow(resizableframeless):
|
||||
else:
|
||||
self.showline(clear=clear)
|
||||
|
||||
gobject.baseobject.edittextui.getnewsentencesignal.emit(text)
|
||||
gobject.baseobject.maybesetedittext(text)
|
||||
|
||||
def showstatus(self, res, color, clear, origin):
|
||||
self.showline(clear=clear, text=res, color=color, origin=origin)
|
||||
@ -234,6 +234,7 @@ class QUnFrameWindow(resizableframeless):
|
||||
)
|
||||
|
||||
if hira:
|
||||
|
||||
@threader
|
||||
def callback(word, append):
|
||||
if globalconfig["usewordorigin"] == False:
|
||||
@ -265,6 +266,7 @@ class QUnFrameWindow(resizableframeless):
|
||||
self.lastrefreshtime = time.time()
|
||||
self.autohidestart = True
|
||||
|
||||
@threader
|
||||
def autohidedelaythread(self):
|
||||
while True:
|
||||
if globalconfig["autodisappear"] and self.autohidestart:
|
||||
@ -295,7 +297,6 @@ class QUnFrameWindow(resizableframeless):
|
||||
self.showhideui()
|
||||
|
||||
def refreshtoolicon(self):
|
||||
|
||||
iconstate = {
|
||||
"fullscreen": self.isletgamefullscreened,
|
||||
"muteprocess": self.processismuteed,
|
||||
@ -383,7 +384,7 @@ class QUnFrameWindow(resizableframeless):
|
||||
"copy",
|
||||
lambda: winsharedutils.clipboard_set(gobject.baseobject.currenttext),
|
||||
),
|
||||
("edit", lambda: gobject.baseobject.edittextui.showsignal.emit()),
|
||||
("edit", gobject.baseobject.createedittextui),
|
||||
("edittrans", lambda: edittrans(gobject.baseobject.settin_ui)),
|
||||
("showraw", self.changeshowhideraw),
|
||||
("history", lambda: gobject.baseobject.transhis.showsignal.emit()),
|
||||
@ -406,7 +407,7 @@ class QUnFrameWindow(resizableframeless):
|
||||
("gamepad_new", lambda: dialog_savedgame_new(gobject.baseobject.settin_ui)),
|
||||
(
|
||||
"selectgame",
|
||||
lambda: gobject.baseobject.AttachProcessDialog.showsignal.emit(),
|
||||
lambda: gobject.baseobject.createattachprocess(),
|
||||
),
|
||||
(
|
||||
"selecttext",
|
||||
@ -492,19 +493,13 @@ class QUnFrameWindow(resizableframeless):
|
||||
self.show()
|
||||
windows.SetForegroundWindow(int(self.winId()))
|
||||
|
||||
def showEvent(self, a0) -> None:
|
||||
if self.isfirstshow:
|
||||
self.showline(clear=True, text=_TR("欢迎使用"), origin=False)
|
||||
def aftershowdosomething(self):
|
||||
self.showline(clear=True, text=_TR("欢迎使用"), origin=False)
|
||||
|
||||
self.tray.activated.connect(self.leftclicktray)
|
||||
|
||||
self.tray.show()
|
||||
windows.SetForegroundWindow(int(self.winId()))
|
||||
self.isfirstshow = False
|
||||
self.setontopthread()
|
||||
self.refreshtoolicon()
|
||||
|
||||
return super().showEvent(a0)
|
||||
windows.SetForegroundWindow(int(self.winId()))
|
||||
self.refreshtoolicon()
|
||||
self.setontopthread()
|
||||
self.autohidedelaythread()
|
||||
|
||||
def canceltop(self):
|
||||
windows.SetWindowPos(
|
||||
@ -554,26 +549,24 @@ class QUnFrameWindow(resizableframeless):
|
||||
windows.SWP_NOACTIVATE | windows.SWP_NOSIZE | windows.SWP_NOMOVE,
|
||||
)
|
||||
|
||||
@threader
|
||||
def setontopthread(self):
|
||||
def _():
|
||||
self.settop()
|
||||
while globalconfig["keepontop"]:
|
||||
self.settop()
|
||||
while globalconfig["keepontop"]:
|
||||
|
||||
try:
|
||||
hwnd = windows.GetForegroundWindow()
|
||||
pid = windows.GetWindowThreadProcessId(hwnd)
|
||||
if pid == os.getpid():
|
||||
pass
|
||||
elif globalconfig["focusnotop"] and self.thistimenotsetop:
|
||||
pass
|
||||
else:
|
||||
self.settop()
|
||||
except:
|
||||
print_exc()
|
||||
time.sleep(0.5)
|
||||
self.canceltop()
|
||||
|
||||
threading.Thread(target=_).start()
|
||||
try:
|
||||
hwnd = windows.GetForegroundWindow()
|
||||
pid = windows.GetWindowThreadProcessId(hwnd)
|
||||
if pid == os.getpid():
|
||||
pass
|
||||
elif globalconfig["focusnotop"] and self.thistimenotsetop:
|
||||
pass
|
||||
else:
|
||||
self.settop()
|
||||
except:
|
||||
print_exc()
|
||||
time.sleep(0.5)
|
||||
self.canceltop()
|
||||
|
||||
def seteffect(self):
|
||||
if globalconfig["WindowEffect"] == 0:
|
||||
@ -583,33 +576,31 @@ class QUnFrameWindow(resizableframeless):
|
||||
elif globalconfig["WindowEffect"] == 2:
|
||||
winsharedutils.setAeroEffect(int(self.winId()))
|
||||
|
||||
def __init__(self):
|
||||
|
||||
super(QUnFrameWindow, self).__init__(
|
||||
None,
|
||||
flags=Qt.WindowType.FramelessWindowHint
|
||||
| Qt.WindowType.WindowMinimizeButtonHint,
|
||||
dic=globalconfig,
|
||||
key="transuigeo",
|
||||
) # 设置为顶级窗口,无边框
|
||||
icon = getExeIcon(sys.argv[0]) #'./LunaTranslator.exe')# QIcon()
|
||||
# icon.addPixmap(QPixmap('./files/luna.png'), QIcon.Normal, QIcon.On)
|
||||
self.setWindowIcon(icon)
|
||||
self.tray = QSystemTrayIcon()
|
||||
self.tray.setIcon(icon)
|
||||
self.isfirstshow = True
|
||||
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
|
||||
self.setAttribute(Qt.WidgetAttribute.WA_ShowWithoutActivating, True)
|
||||
self.setWindowTitle("LunaTranslator")
|
||||
self.hidesignal.connect(self.hide_)
|
||||
def initvalues(self):
|
||||
self.lastrefreshtime = time.time()
|
||||
self.autohidestart = False
|
||||
threading.Thread(target=self.autohidedelaythread).start()
|
||||
self.muteprocessignal.connect(self.muteprocessfuntion)
|
||||
self.toolbarhidedelaysignal.connect(self.toolbarhidedelay)
|
||||
self.enter_sig = 0
|
||||
self.fullscreenmanager_busy = False
|
||||
self.isletgamefullscreened = False
|
||||
self.fullscreenmanager = None
|
||||
self.fullscreenmethod = None
|
||||
self._isTracking = False
|
||||
self.isontop = True
|
||||
self.showhidestate = False
|
||||
self.processismuteed = False
|
||||
self.mousetransparent = False
|
||||
self.thistimenotsetop = False
|
||||
self.backtransparent = False
|
||||
self.isbindedwindow = False
|
||||
self.buttons = {}
|
||||
self.showbuttons = []
|
||||
self.stylebuttons = {}
|
||||
self.saveiterclasspointer = {}
|
||||
|
||||
def initsignals(self):
|
||||
self.hidesignal.connect(self.hide_)
|
||||
|
||||
self.ocr_once_signal.connect(self.ocr_once_function)
|
||||
self.enter_sig = 0
|
||||
self.entersignal.connect(self.enterfunction)
|
||||
self.displaystatus.connect(self.showstatus)
|
||||
self.showhideuisignal.connect(self.showhideui)
|
||||
@ -628,28 +619,32 @@ class QUnFrameWindow(resizableframeless):
|
||||
self.quitf_signal.connect(self.close)
|
||||
self.fullsgame_signal.connect(self._fullsgame)
|
||||
|
||||
self.fullscreenmanager_busy = False
|
||||
self.isletgamefullscreened = False
|
||||
self.fullscreenmanager = None
|
||||
self.fullscreenmethod = None
|
||||
self._isTracking = False
|
||||
self.isontop = True
|
||||
self.muteprocessignal.connect(self.muteprocessfuntion)
|
||||
self.toolbarhidedelaysignal.connect(self.toolbarhidedelay)
|
||||
|
||||
def __init__(self):
|
||||
|
||||
super(QUnFrameWindow, self).__init__(
|
||||
None,
|
||||
flags=Qt.WindowType.FramelessWindowHint
|
||||
| Qt.WindowType.WindowMinimizeButtonHint,
|
||||
dic=globalconfig,
|
||||
key="transuigeo",
|
||||
) # 设置为顶级窗口,无边框
|
||||
icon = getExeIcon(sys.argv[0]) #'./LunaTranslator.exe')# QIcon()
|
||||
# icon.addPixmap(QPixmap('./files/luna.png'), QIcon.Normal, QIcon.On)
|
||||
self.setWindowIcon(icon)
|
||||
|
||||
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
|
||||
self.setAttribute(Qt.WidgetAttribute.WA_ShowWithoutActivating, True)
|
||||
self.setWindowTitle("LunaTranslator")
|
||||
self.initvalues()
|
||||
self.initsignals()
|
||||
self._TitleLabel = QLabel(self)
|
||||
self._TitleLabel.move(0, 0)
|
||||
self.showhidestate = False
|
||||
self.processismuteed = False
|
||||
self.mousetransparent = False
|
||||
self.backtransparent = False
|
||||
self.isbindedwindow = False
|
||||
self.buttons = {}
|
||||
self.showbuttons = []
|
||||
self.stylebuttons = {}
|
||||
self.saveiterclasspointer = {}
|
||||
self.addbuttons()
|
||||
self.translate_text = Textbrowser(self)
|
||||
|
||||
self.translate_text.contentsChanged.connect(self.textAreaChanged)
|
||||
self.thistimenotsetop = False
|
||||
|
||||
def createborderradiusstring(self, r, merge, top=False):
|
||||
if merge:
|
||||
@ -868,7 +863,10 @@ class QUnFrameWindow(resizableframeless):
|
||||
self.refreshtoolicon()
|
||||
|
||||
def changeshowhideraw(self):
|
||||
gobject.baseobject.settin_ui.show_original_switch.click()
|
||||
try:
|
||||
gobject.baseobject.settin_ui.show_original_switch.click()
|
||||
except:
|
||||
pass
|
||||
|
||||
def changeTranslateMode(self):
|
||||
globalconfig["autorun"] = not globalconfig["autorun"]
|
||||
@ -1061,8 +1059,6 @@ class QUnFrameWindow(resizableframeless):
|
||||
if self.fullscreenmanager:
|
||||
self.fullscreenmanager.endX()
|
||||
gobject.baseobject.isrunning = False
|
||||
self.tray.hide()
|
||||
self.tray = None
|
||||
self.hide()
|
||||
|
||||
if gobject.baseobject.textsource:
|
||||
@ -1073,4 +1069,5 @@ class QUnFrameWindow(resizableframeless):
|
||||
|
||||
endsubprocs()
|
||||
self.tryremoveuseless()
|
||||
gobject.baseobject.destroytray()
|
||||
os._exit(0)
|
||||
|
@ -399,6 +399,10 @@ def getsimplecombobox(lst, d, k, callback=None, fixedsize=False, internallist=No
|
||||
return s
|
||||
|
||||
|
||||
def D_getsimplecombobox(lst, d, k, callback=None, fixedsize=False, internallist=None):
|
||||
return lambda: getsimplecombobox(lst, d, k, callback, fixedsize, internallist)
|
||||
|
||||
|
||||
def getlineedit(d, key, callback=None, readonly=False):
|
||||
s = QLineEdit()
|
||||
s.setText(d[key])
|
||||
@ -422,6 +426,10 @@ def getspinbox(mini, maxi, d, key, double=False, step=1, callback=None, dec=1):
|
||||
return s
|
||||
|
||||
|
||||
def D_getspinbox(mini, maxi, d, key, double=False, step=1, callback=None, dec=1):
|
||||
return lambda: getspinbox(mini, maxi, d, key, double, step, callback, dec)
|
||||
|
||||
|
||||
def getcolorbutton(
|
||||
d,
|
||||
key,
|
||||
@ -457,6 +465,34 @@ def getcolorbutton(
|
||||
return b
|
||||
|
||||
|
||||
def D_getcolorbutton(
|
||||
d,
|
||||
key,
|
||||
callback,
|
||||
name=None,
|
||||
parent=None,
|
||||
icon="fa.paint-brush",
|
||||
constcolor=None,
|
||||
enable=True,
|
||||
transparent=True,
|
||||
qicon=None,
|
||||
sizefixed=False,
|
||||
):
|
||||
return lambda: getcolorbutton(
|
||||
d,
|
||||
key,
|
||||
callback,
|
||||
name,
|
||||
parent,
|
||||
icon,
|
||||
constcolor,
|
||||
enable,
|
||||
transparent,
|
||||
qicon,
|
||||
sizefixed,
|
||||
)
|
||||
|
||||
|
||||
def yuitsu_switch(parent, configdict, dictobjectn, key, callback, checked):
|
||||
dictobject = getattr(parent, dictobjectn)
|
||||
if checked:
|
||||
@ -487,6 +523,14 @@ def getsimpleswitch(
|
||||
return b
|
||||
|
||||
|
||||
def D_getsimpleswitch(
|
||||
d, key, enable=True, callback=None, name=None, pair=None, parent=None, default=None
|
||||
):
|
||||
return lambda: getsimpleswitch(
|
||||
d, key, enable, callback, name, pair, parent, default
|
||||
)
|
||||
|
||||
|
||||
def selectcolor(
|
||||
parent, configdict, configkey, button, item=None, name=None, callback=None
|
||||
):
|
||||
@ -506,24 +550,39 @@ def selectcolor(
|
||||
print_exc()
|
||||
|
||||
|
||||
def getboxlayout(widgets, lc=QHBoxLayout, margin0=False, makewidget=False):
|
||||
def getboxlayout(
|
||||
widgets, lc=QHBoxLayout, margin0=False, makewidget=False, delay=False, both=False
|
||||
):
|
||||
cp_layout = lc()
|
||||
for w in widgets:
|
||||
if isinstance(w, QWidget):
|
||||
cp_layout.addWidget(w)
|
||||
elif isinstance(w, QLayout):
|
||||
cp_layout.addLayout(w)
|
||||
|
||||
def __do(cp_layout, widgets):
|
||||
for w in widgets:
|
||||
if callable(w):
|
||||
w = w()
|
||||
if isinstance(w, QWidget):
|
||||
cp_layout.addWidget(w)
|
||||
elif isinstance(w, QLayout):
|
||||
cp_layout.addLayout(w)
|
||||
|
||||
_do = functools.partial(__do, cp_layout, widgets)
|
||||
if margin0:
|
||||
cp_layout.setContentsMargins(0, 0, 0, 0)
|
||||
if not delay:
|
||||
_do()
|
||||
if makewidget:
|
||||
w = QWidget()
|
||||
w.setLayout(cp_layout)
|
||||
if delay:
|
||||
return w, _do
|
||||
if both:
|
||||
return w, cp_layout
|
||||
if makewidget:
|
||||
return w
|
||||
return cp_layout
|
||||
|
||||
|
||||
def makevbox(wids):
|
||||
return getboxlayout(wids, lc=QVBoxLayout, margin0=True, makewidget=True)
|
||||
def getvboxwidget():
|
||||
return getboxlayout([], lc=QVBoxLayout, margin0=True, makewidget=True, both=True)
|
||||
|
||||
|
||||
def textbrowappendandmovetoend(textOutput, sentence, addspace=True):
|
||||
@ -660,6 +719,10 @@ def getsimplekeyseq(dic, key, callback=None):
|
||||
return key1
|
||||
|
||||
|
||||
def D_getsimplekeyseq(dic, key, callback=None):
|
||||
return lambda: getsimplekeyseq(dic, key, callback)
|
||||
|
||||
|
||||
class QWebWrap(QWidget):
|
||||
on_load = pyqtSignal(str)
|
||||
html_limit = 2 * 1024 * 1024
|
||||
@ -789,7 +852,7 @@ def tabadd_lazy(tab, title, getrealwidgetfunction):
|
||||
v = QVBoxLayout()
|
||||
q.setLayout(v)
|
||||
v.setContentsMargins(0, 0, 0, 0)
|
||||
q.lazyfunction = lambda: v.addWidget(getrealwidgetfunction())
|
||||
q.lazyfunction = functools.partial(getrealwidgetfunction, v)
|
||||
tab.addTab(q, _TR(title))
|
||||
|
||||
|
||||
@ -835,9 +898,11 @@ def automakegrid(grid: QGridLayout, lis, save=False, savelist=None):
|
||||
if cols > 0:
|
||||
col = cols
|
||||
elif cols == 0:
|
||||
col = maxl
|
||||
col = maxl - nowc
|
||||
else:
|
||||
col = -maxl // cols
|
||||
if callable(wid):
|
||||
wid = wid()
|
||||
grid.addWidget(wid, nowr, nowc, 1, col)
|
||||
if save:
|
||||
ll.append(wid)
|
||||
@ -847,7 +912,7 @@ def automakegrid(grid: QGridLayout, lis, save=False, savelist=None):
|
||||
grid.setRowMinimumHeight(nowr, 25)
|
||||
|
||||
|
||||
def makegrid(grid, save=False, savelist=None, savelay=None):
|
||||
def makegrid(grid=None, save=False, savelist=None, savelay=None, delay=False):
|
||||
|
||||
class gridwidget(QWidget):
|
||||
pass
|
||||
@ -858,13 +923,38 @@ def makegrid(grid, save=False, savelist=None, savelay=None):
|
||||
gridlayoutwidget.setLayout(gridlay)
|
||||
gridlayoutwidget.setStyleSheet("gridwidget{background-color:transparent;}")
|
||||
|
||||
automakegrid(gridlay, grid, save, savelist)
|
||||
if save:
|
||||
savelay.append(gridlay)
|
||||
return gridlayoutwidget
|
||||
def do(gridlay, grid, save, savelist, savelay):
|
||||
automakegrid(gridlay, grid, save, savelist)
|
||||
if save:
|
||||
savelay.append(gridlay)
|
||||
|
||||
__do = functools.partial(do, gridlay, grid, save, savelist, savelay)
|
||||
if not delay:
|
||||
__do()
|
||||
return gridlayoutwidget
|
||||
return gridlayoutwidget, __do
|
||||
|
||||
|
||||
def makesubtab_lazy(titles=None, functions=None, klass=None, callback=None):
|
||||
def makescroll(widget):
|
||||
scroll = QScrollArea()
|
||||
# scroll.setHorizontalScrollBarPolicy(1)
|
||||
scroll.setStyleSheet("""QScrollArea{background-color:transparent;border:0px}""")
|
||||
scroll.setWidgetResizable(True)
|
||||
return scroll
|
||||
|
||||
|
||||
def makescrollgrid(grid, lay, save=False, savelist=None, savelay=None):
|
||||
wid, do = makegrid(grid, save, savelist, savelay, delay=True)
|
||||
swid = makescroll(wid)
|
||||
lay.addWidget(swid)
|
||||
swid.setWidget(wid)
|
||||
do()
|
||||
return wid
|
||||
|
||||
|
||||
def makesubtab_lazy(
|
||||
titles=None, functions=None, klass=None, callback=None, delay=False
|
||||
):
|
||||
if klass:
|
||||
tab = klass()
|
||||
else:
|
||||
@ -882,16 +972,15 @@ def makesubtab_lazy(titles=None, functions=None, klass=None, callback=None):
|
||||
callback(i)
|
||||
|
||||
tab.currentChanged.connect(functools.partial(__, tab))
|
||||
if titles and functions:
|
||||
for i, func in enumerate(functions):
|
||||
tabadd_lazy(tab, titles[i], func)
|
||||
return tab
|
||||
|
||||
def __do(tab, titles, functions):
|
||||
if titles and functions:
|
||||
for i, func in enumerate(functions):
|
||||
tabadd_lazy(tab, titles[i], func)
|
||||
|
||||
def makescroll(widget):
|
||||
scroll = QScrollArea()
|
||||
# scroll.setHorizontalScrollBarPolicy(1)
|
||||
scroll.setStyleSheet("""QScrollArea{background-color:transparent;border:0px}""")
|
||||
scroll.setWidgetResizable(True)
|
||||
scroll.setWidget(widget)
|
||||
return scroll
|
||||
___do = functools.partial(__do, tab, titles, functions)
|
||||
if not delay:
|
||||
___do()
|
||||
return tab
|
||||
else:
|
||||
return tab, ___do
|
||||
|
@ -76,7 +76,7 @@ def imageCut(hwnd, x1, y1, x2, y2, viscompare=True, rawimage=False) -> QImage:
|
||||
return image
|
||||
image2 = imagesolve(image)
|
||||
if viscompare:
|
||||
gobject.baseobject.showocrimage.setimage.emit([image, image2])
|
||||
gobject.baseobject.maybesetimage([image, image2])
|
||||
return image2
|
||||
|
||||
|
||||
|
@ -632,3 +632,11 @@ def str2rgba(string, alpha100):
|
||||
int(string[5:7], 16),
|
||||
alpha100 / 100,
|
||||
)
|
||||
|
||||
def get_time_stamp():
|
||||
ct = time.time()
|
||||
local_time = time.localtime(ct)
|
||||
data_head = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
|
||||
data_secs = (ct - int(ct)) * 1000
|
||||
time_stamp = "%s.%03d" % (data_head, data_secs)
|
||||
return time_stamp
|
@ -1,7 +1,7 @@
|
||||
try:
|
||||
from PyQt5 import QtSvg
|
||||
from PyQt5.QtWidgets import QFrame,QListView,QCheckBox,QAbstractItemView,QTextEdit,QTableView,QHeaderView,QColorDialog,QSpinBox,QDoubleSpinBox,QComboBox,QDialogButtonBox,QMainWindow,QMessageBox,QDialog,QGridLayout,QTextBrowser,QGraphicsDropShadowEffect,QWidget,QSizePolicy,QScrollArea,QApplication,QPushButton,QSystemTrayIcon,QPlainTextEdit,QAction,QMenu,QFileDialog,QKeySequenceEdit,QLabel,QSpacerItem,QWidgetItem,QLayout,QTextBrowser,QLineEdit,QFormLayout,QSizePolicy,QTabWidget,QTabBar,QSplitter,QListWidget,QListWidgetItem,QHBoxLayout,QVBoxLayout,QSizeGrip,QFontComboBox,QProgressBar,QRadioButton,QButtonGroup,QSlider
|
||||
from PyQt5.QtGui import QIconEngine,QIntValidator,QStandardItem,QStandardItemModel,QImageWriter,QIcon,QTextCharFormat,QTextBlockFormat,QResizeEvent,QTextCursor,QFontMetricsF,QMouseEvent,QImage,QPainter,QRegion,QCloseEvent,QFontDatabase,QKeySequence,QPixmap,QCursor,QColor,QFont,QPen,QPainterPath,QBrush,QFontMetrics
|
||||
from PyQt5.QtGui import QIconEngine,QIntValidator,QStandardItem,QStandardItemModel,QImageWriter,QIcon,QTextCharFormat,QTextBlockFormat,QResizeEvent,QTextCursor,QFontMetricsF,QMouseEvent,QImage,QPainter,QRegion,QCloseEvent,QFontDatabase,QKeySequence,QPixmap,QCursor,QColor,QFont,QPen,QPainterPath,QBrush,QFontMetrics,QShowEvent
|
||||
from PyQt5.QtCore import QObject,pyqtSignal,Qt,QSize,QByteArray,QBuffer,QPointF,QPoint,QRect,QEvent,QModelIndex
|
||||
isqt5 = True
|
||||
except:
|
||||
@ -9,6 +9,6 @@ except:
|
||||
#print_exc()
|
||||
from PyQt6 import QtSvg
|
||||
from PyQt6.QtWidgets import QFrame,QListView,QCheckBox,QAbstractItemView,QTextEdit,QTableView,QHeaderView,QColorDialog,QSpinBox,QDoubleSpinBox,QComboBox,QDialogButtonBox,QMainWindow,QMessageBox,QDialog,QGridLayout,QTextBrowser,QGraphicsDropShadowEffect,QWidget,QSizePolicy,QScrollArea,QApplication,QPushButton,QSystemTrayIcon,QPlainTextEdit,QMenu,QFileDialog,QKeySequenceEdit,QLabel,QSpacerItem,QWidgetItem,QLayout,QTextBrowser,QLineEdit,QFormLayout,QSizePolicy,QTabWidget,QTabBar,QSplitter,QListWidget,QListWidgetItem,QHBoxLayout,QVBoxLayout,QSizeGrip,QFontComboBox,QProgressBar,QRadioButton,QButtonGroup,QSlider
|
||||
from PyQt6.QtGui import QIconEngine,QIntValidator,QAction,QStandardItem,QStandardItemModel,QImageWriter,QIcon,QTextCharFormat,QTextBlockFormat,QResizeEvent,QTextCursor,QFontMetricsF,QMouseEvent,QImage,QPainter,QRegion,QCloseEvent,QFontDatabase,QKeySequence,QPixmap,QCursor,QColor,QFont,QPen,QPainterPath,QBrush,QFontMetrics
|
||||
from PyQt6.QtGui import QIconEngine,QIntValidator,QAction,QStandardItem,QStandardItemModel,QImageWriter,QIcon,QTextCharFormat,QTextBlockFormat,QResizeEvent,QTextCursor,QFontMetricsF,QMouseEvent,QImage,QPainter,QRegion,QCloseEvent,QFontDatabase,QKeySequence,QPixmap,QCursor,QColor,QFont,QPen,QPainterPath,QBrush,QFontMetrics,QShowEvent
|
||||
from PyQt6.QtCore import QObject,pyqtSignal,Qt,QSize,QByteArray,QBuffer,QPointF,QPoint,QRect,QEvent,QModelIndex
|
||||
isqt5 = False
|
@ -105,9 +105,12 @@ class ocrtext(basetext):
|
||||
else:
|
||||
image_score = 0
|
||||
if i == 0:
|
||||
gobject.baseobject.settin_ui.threshold1label.setText(
|
||||
str(image_score)
|
||||
)
|
||||
try:
|
||||
gobject.baseobject.settin_ui.threshold1label.setText(
|
||||
str(image_score)
|
||||
)
|
||||
except:
|
||||
pass
|
||||
self.savelastimg[i] = imgr1
|
||||
|
||||
if image_score > globalconfig["ocr_stable_sim"]:
|
||||
@ -118,9 +121,12 @@ class ocrtext(basetext):
|
||||
else:
|
||||
image_score2 = 0
|
||||
if i == 0:
|
||||
gobject.baseobject.settin_ui.threshold2label.setText(
|
||||
str(image_score2)
|
||||
)
|
||||
try:
|
||||
gobject.baseobject.settin_ui.threshold2label.setText(
|
||||
str(image_score2)
|
||||
)
|
||||
except:
|
||||
pass
|
||||
if image_score2 > globalconfig["ocr_diff_sim"]:
|
||||
ok = False
|
||||
else:
|
||||
|
@ -562,21 +562,6 @@
|
||||
"quick_setting": {
|
||||
"use": false,
|
||||
"all": {
|
||||
"_A": {
|
||||
"use": false,
|
||||
"name": "选择翻译源_剪贴板",
|
||||
"keystring": ""
|
||||
},
|
||||
"_B": {
|
||||
"use": false,
|
||||
"name": "选择翻译源_OCR",
|
||||
"keystring": ""
|
||||
},
|
||||
"_C": {
|
||||
"use": false,
|
||||
"name": "选择翻译源_HOOK",
|
||||
"keystring": ""
|
||||
},
|
||||
"_1": {
|
||||
"use": false,
|
||||
"name": "重新翻译",
|
||||
@ -706,6 +691,11 @@
|
||||
"use": false,
|
||||
"name": "模拟按键Enter",
|
||||
"keystring": ""
|
||||
},
|
||||
"_28": {
|
||||
"use": false,
|
||||
"name": "复制到剪贴板_翻译",
|
||||
"keystring": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "عقوبة طويلة",
|
||||
"重复惩罚": "تكرار العقوبة",
|
||||
"OCR语言包": "التعرف الضوئي على الحروف حزمة اللغة",
|
||||
"选择翻译源": "اختيار مصدر الترجمة",
|
||||
"最长显示字数": "أقصى عرض الكلمات",
|
||||
"显示日语注音": "عرض صوتي ياباني",
|
||||
"注音颜色": "لون صوتي",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "نافذة المؤثرات الخاصة",
|
||||
"实时编辑": "في الوقت الحقيقي تحرير",
|
||||
"翻译记录": "سجل الترجمة",
|
||||
"遍历目录中的全部词典文件": "اجتياز جميع ملفات القاموس في الدليل"
|
||||
"遍历目录中的全部词典文件": "اجتياز جميع ملفات القاموس في الدليل",
|
||||
"网络请求": "طلب شبكة",
|
||||
"网页显示": "عرض الصفحة",
|
||||
"显示时间": "عرض الوقت",
|
||||
"不显示时间": "لا وقت العرض"
|
||||
}
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "過長懲罰",
|
||||
"重复惩罚": "重複懲罰",
|
||||
"OCR语言包": "OCR語言包",
|
||||
"选择翻译源": "選擇翻譯源",
|
||||
"最长显示字数": "最長顯示字數",
|
||||
"显示日语注音": "顯示日語注音",
|
||||
"注音颜色": "注音顏色",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "視窗特效",
|
||||
"实时编辑": "實时編輯",
|
||||
"翻译记录": "翻譯記錄",
|
||||
"遍历目录中的全部词典文件": "遍歷目錄中的全部詞典檔案"
|
||||
"遍历目录中的全部词典文件": "遍歷目錄中的全部詞典檔案",
|
||||
"网络请求": "網絡請求",
|
||||
"网页显示": "網頁顯示",
|
||||
"显示时间": "顯示時間",
|
||||
"不显示时间": "不顯示時間"
|
||||
}
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "Excessive punishment",
|
||||
"重复惩罚": "Repetitive punishment",
|
||||
"OCR语言包": "OCR Language Pack",
|
||||
"选择翻译源": "Select Translation Source",
|
||||
"最长显示字数": "Maximum number of displayed words",
|
||||
"显示日语注音": "Display Japanese Pinyin",
|
||||
"注音颜色": "Pinyin color",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "Window effects",
|
||||
"实时编辑": "Real time editing",
|
||||
"翻译记录": "Translation records",
|
||||
"遍历目录中的全部词典文件": "Traverse all dictionary files in the directory"
|
||||
"遍历目录中的全部词典文件": "Traverse all dictionary files in the directory",
|
||||
"网络请求": "Network request",
|
||||
"网页显示": "Web page display",
|
||||
"显示时间": "Display time",
|
||||
"不显示时间": "Do not display time"
|
||||
}
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "Castigo excesivo",
|
||||
"重复惩罚": "Repetir el castigo",
|
||||
"OCR语言包": "Paquete lingüístico OCR",
|
||||
"选择翻译源": "Selección de la fuente de traducción",
|
||||
"最长显示字数": "Número máximo de palabras mostradas",
|
||||
"显示日语注音": "Muestra la fonética japonesa",
|
||||
"注音颜色": "Color de la nota",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "Efectos especiales de la ventana",
|
||||
"实时编辑": "Edición en tiempo real",
|
||||
"翻译记录": "Registros de traducción",
|
||||
"遍历目录中的全部词典文件": "Recorrer todos los archivos del diccionario en el catálogo"
|
||||
"遍历目录中的全部词典文件": "Recorrer todos los archivos del diccionario en el catálogo",
|
||||
"网络请求": "Solicitud de red",
|
||||
"网页显示": "Pantalla de la página web",
|
||||
"显示时间": "Tiempo de visualización",
|
||||
"不显示时间": "No muestra el tiempo"
|
||||
}
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "Pénalité trop longue",
|
||||
"重复惩罚": "Punition répétée",
|
||||
"OCR语言包": "Pack de langue ocr",
|
||||
"选择翻译源": "Choisir une source de traduction",
|
||||
"最长显示字数": "Nombre maximal de mots affichés",
|
||||
"显示日语注音": "Afficher les notes en japonais",
|
||||
"注音颜色": "Couleur d'accent",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "Effets spéciaux de fenêtre",
|
||||
"实时编辑": "Edit en temps réel",
|
||||
"翻译记录": "Record de traduction",
|
||||
"遍历目录中的全部词典文件": "Parcourir tous les fichiers de dictionnaire dans le Répertoire"
|
||||
"遍历目录中的全部词典文件": "Parcourir tous les fichiers de dictionnaire dans le Répertoire",
|
||||
"网络请求": "Demande de réseau",
|
||||
"网页显示": "Affichage de la page Web",
|
||||
"显示时间": "Afficher l'heure",
|
||||
"不显示时间": "Ne pas afficher l'heure"
|
||||
}
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "Pena eccessiva",
|
||||
"重复惩罚": "Pena ripetitiva",
|
||||
"OCR语言包": "Pacchetto linguistico OCR",
|
||||
"选择翻译源": "Seleziona sorgente di traduzione",
|
||||
"最长显示字数": "Numero massimo di parole visualizzate",
|
||||
"显示日语注音": "Mostra pinyin giapponese",
|
||||
"注音颜色": "Colore pinyin",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "Effetti finestra",
|
||||
"实时编辑": "Modifica in tempo reale",
|
||||
"翻译记录": "Record di traduzione",
|
||||
"遍历目录中的全部词典文件": "Attraversa tutti i file del dizionario nella directory"
|
||||
"遍历目录中的全部词典文件": "Attraversa tutti i file del dizionario nella directory",
|
||||
"网络请求": "Richiesta di rete",
|
||||
"网页显示": "Visualizzazione pagina web",
|
||||
"显示时间": "Tempo di visualizzazione",
|
||||
"不显示时间": "Non visualizzare l'ora"
|
||||
}
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "長すぎる罰",
|
||||
"重复惩罚": "繰り返し罰する.",
|
||||
"OCR语言包": "OCR言語パック",
|
||||
"选择翻译源": "翻訳ソースの選択",
|
||||
"最长显示字数": "最長表示文字数",
|
||||
"显示日语注音": "日本語のルビを表示",
|
||||
"注音颜色": "ルビの色",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "ウィンドウ効果",
|
||||
"实时编辑": "リアルタイム編集",
|
||||
"翻译记录": "翻訳レコード",
|
||||
"遍历目录中的全部词典文件": "ディレクトリ内のすべての辞書ファイルを巡回"
|
||||
"遍历目录中的全部词典文件": "ディレクトリ内のすべての辞書ファイルを巡回",
|
||||
"网络请求": "ネットワーク要求",
|
||||
"网页显示": "Webページ表示",
|
||||
"显示时间": "表示時間",
|
||||
"不显示时间": "時間を表示しない"
|
||||
}
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "과도한 처벌",
|
||||
"重复惩罚": "반복 처벌",
|
||||
"OCR语言包": "OCR 언어 팩",
|
||||
"选择翻译源": "번역 소스 선택",
|
||||
"最长显示字数": "최대 표시 단어 수",
|
||||
"显示日语注音": "일본어 메모 표시",
|
||||
"注音颜色": "주음 색상",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "창 효과",
|
||||
"实时编辑": "실시간 편집",
|
||||
"翻译记录": "번역 기록",
|
||||
"遍历目录中的全部词典文件": "디렉토리의 모든 사전 파일 반복"
|
||||
"遍历目录中的全部词典文件": "디렉토리의 모든 사전 파일 반복",
|
||||
"网络请求": "네트워크 요청",
|
||||
"网页显示": "웹 페이지 표시",
|
||||
"显示时间": "표시 시간",
|
||||
"不显示时间": "시간 표시 안 함"
|
||||
}
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "Nadmierna kara",
|
||||
"重复惩罚": "Kary powtarzające się",
|
||||
"OCR语言包": "Pakiet językowy OCR",
|
||||
"选择翻译源": "Wybierz źródło tłumaczenia",
|
||||
"最长显示字数": "Maksymalna liczba wyświetlanych słów",
|
||||
"显示日语注音": "Wyświetl japoński pinyin",
|
||||
"注音颜色": "Kolor pinyin",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "Efekty okien",
|
||||
"实时编辑": "Edycja w czasie rzeczywistym",
|
||||
"翻译记录": "Zapisy tłumaczeń",
|
||||
"遍历目录中的全部词典文件": "Przejrzyj wszystkie pliki słownika w katalogu"
|
||||
"遍历目录中的全部词典文件": "Przejrzyj wszystkie pliki słownika w katalogu",
|
||||
"网络请求": "Żądanie sieci",
|
||||
"网页显示": "Wyświetlanie strony internetowej",
|
||||
"显示时间": "Czas wyświetlania",
|
||||
"不显示时间": "Nie wyświetlaj czasu"
|
||||
}
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "Слишком длительное наказание",
|
||||
"重复惩罚": "Повторное наказание",
|
||||
"OCR语言包": "Языковый пакет OCR",
|
||||
"选择翻译源": "Выберите источник перевода",
|
||||
"最长显示字数": "Максимальное количество слов",
|
||||
"显示日语注音": "Показать японское произношение",
|
||||
"注音颜色": "Цвет звука",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "Специальные эффекты окон",
|
||||
"实时编辑": "Редактирование в реальном времени",
|
||||
"翻译记录": "Перевод записей",
|
||||
"遍历目录中的全部词典文件": "Все словарные файлы в каталоге"
|
||||
"遍历目录中的全部词典文件": "Все словарные файлы в каталоге",
|
||||
"网络请求": "Сетевой запрос",
|
||||
"网页显示": "Показать страницу",
|
||||
"显示时间": "Показать время",
|
||||
"不显示时间": "Не показывать время"
|
||||
}
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "การลงโทษที่ยาวนานเกินไป",
|
||||
"重复惩罚": "การลงโทษซ้ำ",
|
||||
"OCR语言包": "แพคภาษา OCR",
|
||||
"选择翻译源": "เลือกแหล่งที่มาของการแปล",
|
||||
"最长显示字数": "แสดงจำนวนคำที่ยาวที่สุด",
|
||||
"显示日语注音": "แสดงหมายเหตุภาษาญี่ปุ่น",
|
||||
"注音颜色": "สี Injection",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "เทคนิคพิเศษของหน้าต่าง",
|
||||
"实时编辑": "แก้ไขแบบเรียลไทม์",
|
||||
"翻译记录": "บันทึกการแปล",
|
||||
"遍历目录中的全部词典文件": "ผ่านไฟล์พจนานุกรมทั้งหมดในไดเรกทอรี"
|
||||
"遍历目录中的全部词典文件": "ผ่านไฟล์พจนานุกรมทั้งหมดในไดเรกทอรี",
|
||||
"网络请求": "คำขอเครือข่าย",
|
||||
"网页显示": "แสดงหน้าเว็บ",
|
||||
"显示时间": "แสดงเวลา",
|
||||
"不显示时间": "ไม่แสดงเวลา"
|
||||
}
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "Çok fazla ceza",
|
||||
"重复惩罚": "Tekrar cezalandırıcı",
|
||||
"OCR语言包": "OCR Language Pack",
|
||||
"选择翻译源": "Çeviri Kaynağını Seç",
|
||||
"最长显示字数": "Gösterilen sözlerin en yüksek sayısı",
|
||||
"显示日语注音": "Display Japanese Pinyin",
|
||||
"注音颜色": "Pinyin rengi",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "Pencere etkileri",
|
||||
"实时编辑": "Gerçek zamanlı düzenleme",
|
||||
"翻译记录": "Çeviri kayıtları",
|
||||
"遍历目录中的全部词典文件": "Dizindeki bütün sözlük dosyalarını yolla"
|
||||
"遍历目录中的全部词典文件": "Dizindeki bütün sözlük dosyalarını yolla",
|
||||
"网络请求": "Network request",
|
||||
"网页显示": "Web sayfası gösterisi",
|
||||
"显示时间": "Display time",
|
||||
"不显示时间": "Zamanı gösterme"
|
||||
}
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "Великий покарання",
|
||||
"重复惩罚": "Повторює покарання",
|
||||
"OCR语言包": "Пакет мови OCR",
|
||||
"选择翻译源": "Виберіть джерело перекладу",
|
||||
"最长显示字数": "Максимальна кількість показаних слів",
|
||||
"显示日语注音": "Показувати японський пінін",
|
||||
"注音颜色": "Колір пініна",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "Ефекти вікна",
|
||||
"实时编辑": "Редагування реального часу",
|
||||
"翻译记录": "Записи перекладів",
|
||||
"遍历目录中的全部词典文件": "Пересунути всі файли словника у каталозі"
|
||||
"遍历目录中的全部词典文件": "Пересунути всі файли словника у каталозі",
|
||||
"网络请求": "Запит на мережу",
|
||||
"网页显示": "Показ веб- сторінок",
|
||||
"显示时间": "Час показу",
|
||||
"不显示时间": "Не показувати час"
|
||||
}
|
@ -620,7 +620,6 @@
|
||||
"过长惩罚": "Hình phạt quá dài",
|
||||
"重复惩罚": "Hình phạt lặp lại",
|
||||
"OCR语言包": "Gói ngôn ngữ OCR",
|
||||
"选择翻译源": "Chọn nguồn dịch",
|
||||
"最长显示字数": "Hiển thị tối đa số từ",
|
||||
"显示日语注音": "Hiện chú thích tiếng Nhật",
|
||||
"注音颜色": "Màu chú thích",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "Hiệu ứng cửa sổ",
|
||||
"实时编辑": "Chỉnh sửa thời gian thực",
|
||||
"翻译记录": "Bản dịch",
|
||||
"遍历目录中的全部词典文件": "Đi qua tất cả các tập tin từ điển trong thư mục"
|
||||
"遍历目录中的全部词典文件": "Đi qua tất cả các tập tin từ điển trong thư mục",
|
||||
"网络请求": "Yêu cầu mạng",
|
||||
"网页显示": "Hiển thị trang web",
|
||||
"显示时间": "Thời gian hiển thị",
|
||||
"不显示时间": "Không hiển thị thời gian"
|
||||
}
|
@ -619,7 +619,6 @@
|
||||
"过长惩罚": "",
|
||||
"重复惩罚": "",
|
||||
"OCR语言包": "",
|
||||
"选择翻译源": "",
|
||||
"最长显示字数": "",
|
||||
"显示日语注音": "",
|
||||
"注音颜色": "",
|
||||
@ -804,5 +803,9 @@
|
||||
"窗口特效": "",
|
||||
"实时编辑": "",
|
||||
"翻译记录": "",
|
||||
"遍历目录中的全部词典文件": ""
|
||||
"遍历目录中的全部词典文件": "",
|
||||
"网络请求": "",
|
||||
"网页显示": "",
|
||||
"显示时间": "",
|
||||
"不显示时间": ""
|
||||
}
|
@ -28,8 +28,8 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/version)
|
||||
include(generate_product_version)
|
||||
|
||||
set(VERSION_MAJOR 3)
|
||||
set(VERSION_MINOR 0)
|
||||
set(VERSION_PATCH 6)
|
||||
set(VERSION_MINOR 1)
|
||||
set(VERSION_PATCH 0)
|
||||
|
||||
add_library(pch pch.cpp)
|
||||
target_precompile_headers(pch PUBLIC pch.h)
|
||||
|
Loading…
x
Reference in New Issue
Block a user