Skip to content

Commit 4a628cf

Browse files
feature: rightclick to change similar kana
1 parent e13c3d3 commit 4a628cf

6 files changed

Lines changed: 147 additions & 4 deletions

File tree

GUI.py

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import contextlib
33
import sys
44
from PyQt6 import QtWidgets
5-
from PyQt6.QtCore import pyqtSignal, QThread, QMutex, Qt
5+
from PyQt6.QtCore import pyqtSignal, QThread, QMutex, Qt, QPoint
66
from OCR_style import Ui_OCR_Window
77
from getSecret_style import Ui_getSecretWidget
88
from Screenshot import getScreenPos, getScreenshot
@@ -14,7 +14,7 @@
1414
from config_style import Ui_Config
1515
from Config import readConfig, writeConfig, isInit
1616
import keyboard
17-
from customerDefineDict import ZhNameDict, JPNameDict
17+
from customerDefineDict import ZhNameDict, JPNameDict, hirakanaList, katakanaList
1818
# from var_dump import var_dump
1919

2020
def keymap_replace(
@@ -45,6 +45,8 @@ def keymap_replace(
4545
)
4646
return replaced_string
4747

48+
def getSimilarKana(kana: str) -> list:
49+
return [similarKana for similarKana in katakanaList+hirakanaList if kana in similarKana]
4850

4951
def nameReplace(string: str, reverse=False):
5052
_dict = ZhNameDict if reverse else JPNameDict
@@ -310,6 +312,7 @@ def __init__(self):
310312
self.selectionText = str()
311313
self.OCRText = str()
312314
self.setupUi(self)
315+
self.replaceListWidget.hide()
313316
self.defaultWidth, self.defaultHeight = self.width(), self.height()
314317
self.defaultX, self.defaultY = self.geometry().x(), self.geometry().y()
315318
self.OCRResultTextEdit.setPlainText('')
@@ -320,7 +323,7 @@ def __init__(self):
320323
self.configWidget = configWidget_class(self)
321324
self.selectionTextChange = self.dictWindow.selectionTextChange
322325
self.autoDict = self.autoDictCheckBox.isChecked()
323-
self.resultTextEditList = self.TransResult_0,self.TransResult_1,self.TransResult_2,self.TransResult_3
326+
self.resultTextEditList = self.TransResult_0, self.TransResult_1, self.TransResult_2, self.TransResult_3
324327
self.updateTranslatorList(self.ConfigDict['SELECTED_TRANSLATORS'])
325328
self.autoTrans = True
326329
if(not isInit):
@@ -354,6 +357,32 @@ def updateSelectionText(self):
354357
if(self.autoDict):
355358
self.showDictWindow()
356359

360+
def showReplaceListWidget(self):
361+
selectedText = self.OCRResultTextEdit.textCursor().selectedText()
362+
if(len(selectedText) != 1 or self.autoDict):
363+
self.replaceListWidget.hide()
364+
return
365+
similarKanaList = getSimilarKana(selectedText)
366+
if(not similarKanaList):
367+
self.replaceListWidget.hide()
368+
return
369+
similarKanaList = list(similarKanaList[0])
370+
similarKanaList.remove(selectedText)
371+
if len(similarKanaList) == 1: self.replaceListWidget.setFixedSize(35,35)
372+
else: self.replaceListWidget.setFixedSize(35,70)
373+
self.replaceListWidget.clear()
374+
self.replaceListWidget.addItems(similarKanaList)
375+
self.replaceListWidget.show()
376+
self.replaceListWidget.move(self.OCRResultTextEdit.mapToParent(QPoint(self.OCRResultTextEdit.cursorRect().left(),self.OCRResultTextEdit.cursorRect().bottom())))
377+
378+
def hideReplaceListWidget(self):
379+
self.replaceListWidget.hide()
380+
381+
def replaceKana(self):
382+
_pos = min(self.OCRResultTextEdit.selectionArea)
383+
nowText = self.OCRResultTextEdit.toPlainText()
384+
self.OCRResultTextEdit.setPlainText(nowText[:_pos] + self.replaceListWidget.currentItem().text() + nowText[_pos+1:])
385+
357386
def updateAutoTransBool(self,_bool):
358387
self.autoTrans = _bool
359388

OCR_style.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,19 @@ def setupUi(self, OCR_Window):
198198
self.doTransButton_2.setFont(font)
199199
self.doTransButton_2.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
200200
self.doTransButton_2.setObjectName("doTransButton_2")
201+
self.replaceListWidget = QtWidgets.QListWidget(self.centralwidget)
202+
self.replaceListWidget.setGeometry(QtCore.QRect(720, 60, 30, 70))
203+
font = QtGui.QFont()
204+
font.setFamily("Microsoft YaHei UI")
205+
font.setPointSize(17)
206+
self.replaceListWidget.setFont(font)
207+
self.replaceListWidget.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
208+
self.replaceListWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
209+
self.replaceListWidget.setAutoScrollMargin(16)
210+
self.replaceListWidget.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.DoubleClicked)
211+
self.replaceListWidget.setProperty("showDropIndicator", False)
212+
self.replaceListWidget.setTextElideMode(QtCore.Qt.TextElideMode.ElideMiddle)
213+
self.replaceListWidget.setObjectName("replaceListWidget")
201214
self.changeHotKeyButton.raise_()
202215
self.ShortcutKeyText.raise_()
203216
self.OCRResultTextEdit.raise_()
@@ -219,6 +232,7 @@ def setupUi(self, OCR_Window):
219232
self.autoTransCheckBox.raise_()
220233
self.doTransButton.raise_()
221234
self.doTransButton_2.raise_()
235+
self.replaceListWidget.raise_()
222236
OCR_Window.setCentralWidget(self.centralwidget)
223237

224238
self.retranslateUi(OCR_Window)
@@ -239,6 +253,9 @@ def setupUi(self, OCR_Window):
239253
self.OCRResultTextEdit.textChanged.connect(OCR_Window.updateOCRText) # type: ignore
240254
self.changeHotKeyButton.clicked.connect(OCR_Window.getIntoHotKeyChangeMode) # type: ignore
241255
self.doTransButton_2.clicked.connect(OCR_Window.showConfig) # type: ignore
256+
self.OCRResultTextEdit.callContextMenu.connect(OCR_Window.showReplaceListWidget) # type: ignore
257+
self.OCRResultTextEdit.focusOut.connect(OCR_Window.hideReplaceListWidget) # type: ignore
258+
self.replaceListWidget.clicked['QModelIndex'].connect(OCR_Window.replaceKana) # type: ignore
242259
QtCore.QMetaObject.connectSlotsByName(OCR_Window)
243260
OCR_Window.setTabOrder(self.TransResult_0, self.ChooseAreaButton)
244261
OCR_Window.setTabOrder(self.ChooseAreaButton, self.OCRButton)

OCR_style.ui

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,40 @@
512512
<string>设置</string>
513513
</property>
514514
</widget>
515+
<widget class="QListWidget" name="replaceListWidget">
516+
<property name="geometry">
517+
<rect>
518+
<x>720</x>
519+
<y>60</y>
520+
<width>30</width>
521+
<height>70</height>
522+
</rect>
523+
</property>
524+
<property name="font">
525+
<font>
526+
<family>Microsoft YaHei UI</family>
527+
<pointsize>17</pointsize>
528+
</font>
529+
</property>
530+
<property name="verticalScrollBarPolicy">
531+
<enum>Qt::ScrollBarAlwaysOff</enum>
532+
</property>
533+
<property name="horizontalScrollBarPolicy">
534+
<enum>Qt::ScrollBarAlwaysOff</enum>
535+
</property>
536+
<property name="autoScrollMargin">
537+
<number>16</number>
538+
</property>
539+
<property name="editTriggers">
540+
<set>QAbstractItemView::DoubleClicked</set>
541+
</property>
542+
<property name="showDropIndicator" stdset="0">
543+
<bool>false</bool>
544+
</property>
545+
<property name="textElideMode">
546+
<enum>Qt::ElideMiddle</enum>
547+
</property>
548+
</widget>
515549
<zorder>changeHotKeyButton</zorder>
516550
<zorder>ShortcutKeyText</zorder>
517551
<zorder>OCRResultTextEdit</zorder>
@@ -533,6 +567,7 @@
533567
<zorder>autoTransCheckBox</zorder>
534568
<zorder>doTransButton</zorder>
535569
<zorder>doTransButton_2</zorder>
570+
<zorder>replaceListWidget</zorder>
536571
</widget>
537572
</widget>
538573
<customwidgets>
@@ -543,6 +578,7 @@
543578
<slots>
544579
<signal>selectedFinish()</signal>
545580
<signal>focusOut()</signal>
581+
<signal>callContextMenu()</signal>
546582
<slot>clearSelection()</slot>
547583
</slots>
548584
</customwidget>
@@ -837,6 +873,54 @@
837873
</hint>
838874
</hints>
839875
</connection>
876+
<connection>
877+
<sender>OCRResultTextEdit</sender>
878+
<signal>callContextMenu()</signal>
879+
<receiver>OCR_Window</receiver>
880+
<slot>showReplaceListWidget()</slot>
881+
<hints>
882+
<hint type="sourcelabel">
883+
<x>41</x>
884+
<y>119</y>
885+
</hint>
886+
<hint type="destinationlabel">
887+
<x>4</x>
888+
<y>123</y>
889+
</hint>
890+
</hints>
891+
</connection>
892+
<connection>
893+
<sender>OCRResultTextEdit</sender>
894+
<signal>focusOut()</signal>
895+
<receiver>OCR_Window</receiver>
896+
<slot>hideReplaceListWidget()</slot>
897+
<hints>
898+
<hint type="sourcelabel">
899+
<x>131</x>
900+
<y>89</y>
901+
</hint>
902+
<hint type="destinationlabel">
903+
<x>272</x>
904+
<y>46</y>
905+
</hint>
906+
</hints>
907+
</connection>
908+
<connection>
909+
<sender>replaceListWidget</sender>
910+
<signal>clicked(QModelIndex)</signal>
911+
<receiver>OCR_Window</receiver>
912+
<slot>replaceKana()</slot>
913+
<hints>
914+
<hint type="sourcelabel">
915+
<x>736</x>
916+
<y>71</y>
917+
</hint>
918+
<hint type="destinationlabel">
919+
<x>856</x>
920+
<y>39</y>
921+
</hint>
922+
</hints>
923+
</connection>
840924
</connections>
841925
<slots>
842926
<signal>ocrHotkeyPressed()</signal>
@@ -858,5 +942,8 @@
858942
<slot>confirmHotkey()</slot>
859943
<slot>cancelHotKey()</slot>
860944
<slot>showConfig()</slot>
945+
<slot>showReplaceListWidget()</slot>
946+
<slot>hideReplaceListWidget()</slot>
947+
<slot>replaceKana()</slot>
861948
</slots>
862949
</ui>

customerDefineDict.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,7 @@
3636
"石川": "生酱",
3737
"松下": "恋恋",
3838
}
39+
40+
hirakanaList = [("か","が"),("き","ぎ"),("く","ぐ"),("け","げ"),("こ","ご"),("さ","ざ"),("し","じ"),("す","ず"),("せ","ぜ"),("そ","ぞ"),("た","だ"),("ち","ぢ"),("つ","づ"),("て","で"),("と","ど"),("は","ば","ぱ"),("ひ","び","ぴ"),("ふ","ぶ","ぷ"),("へ","べ","ぺ"),("ほ","ぼ","ぽ")]
41+
42+
katakanaList = [("カ","ガ"),("キ","ギ"),("ク","グ"),("ケ","ゲ"),("コ","ゴ"),("サ","ザ"),("シ","ジ"),("ス","ズ"),("セ","ゼ"),("ソ","ゾ"),("タ","ダ"),("チ","ヂ"),("ツ","ヅ"),("テ","デ"),("ト","ド"),("ハ","バ","パ"),("ヒ","ビ","ピ"),("フ","ブ","プ"),("ヘ","ベ","ペ"),("ホ","ボ","ポ")]

customerDefineQtClass.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class betterSelectionQPlainTextEdit(QPlainTextEdit):
1616
mouseRelease = pyqtSignal()
1717
selectedFinish = pyqtSignal()
1818
focusOut = pyqtSignal()
19+
callContextMenu = pyqtSignal()
1920
def __init__(self, parent=None):
2021
super().__init__(parent)
2122
def mouseReleaseEvent(self,event):
@@ -28,5 +29,10 @@ def focusOutEvent(self,event):
2829
self.focusOut.emit()
2930
def clearSelection(self):
3031
_cursor = self.textCursor()
32+
self.selectionArea = _cursor.selectionEnd(), _cursor.selectionStart()
3133
_cursor.clearSelection()
3234
self.setTextCursor(_cursor)
35+
def contextMenuEvent(self, e) -> None:
36+
self.callContextMenu.emit()
37+
_cursor = self.textCursor()
38+
self.selectionArea = _cursor.selectionEnd(), _cursor.selectionStart()

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ PyAutoGUI==0.9.53
1212
numpy==1.21.5
1313
fugashi==1.1.2
1414
tencentcloud-sdk-python==3.0.598
15-
pyinstaller==4.10
15+
pyinstaller==5.1
1616
PyWin32==303
1717
mecab-python3==1.0.4
1818
PyYAML==6.0

0 commit comments

Comments
 (0)