This commit is contained in:
恍兮惚兮 2024-05-21 01:08:23 +08:00
parent 9a08591e62
commit 3e498ded19
18 changed files with 103 additions and 41 deletions

View File

@ -14,6 +14,8 @@ from PyQt5.QtWidgets import (
QTabBar, QTabBar,
QLabel, QLabel,
) )
from myutils.hwnd import grabwindow
from urllib.parse import quote from urllib.parse import quote
from PyQt5.QtGui import QPixmap, QImage from PyQt5.QtGui import QPixmap, QImage
from traceback import print_exc from traceback import print_exc
@ -107,7 +109,21 @@ class statusbutton(QPushButton):
self.statuschanged2.emit((self.idx) % len(self.colors)) self.statuschanged2.emit((self.idx) % len(self.colors))
self.seticon() self.seticon()
class autoremovelineedit(QLineEdit):
def check(self):
last=self.text()
if os.path.exists(last) and os.path.isfile(last):
norm_dir1 = os.path.normpath(last)
norm_dir2 = os.path.normpath(os.path.abspath('./cache'))
print(norm_dir1,norm_dir2)
if norm_dir1.startswith(norm_dir2):
os.remove(last)
def setText(self,s):
self.check()
super().setText(s)
def clear(self):
self.check()
class AnkiWindow(QWidget): class AnkiWindow(QWidget):
__ocrsettext = pyqtSignal(str) __ocrsettext = pyqtSignal(str)
refreshhtml = pyqtSignal() refreshhtml = pyqtSignal()
@ -371,6 +387,10 @@ class AnkiWindow(QWidget):
_TR("自动TTS"), _TR("自动TTS"),
getsimpleswitch(globalconfig["ankiconnect"], "autoruntts"), getsimpleswitch(globalconfig["ankiconnect"], "autoruntts"),
) )
layout.addRow(
_TR("自动截图"),
getsimpleswitch(globalconfig["ankiconnect"], "autocrop"),
)
layout.addRow( layout.addRow(
_TR("录音时模拟按键_1"), _TR("录音时模拟按键_1"),
@ -422,11 +442,11 @@ class AnkiWindow(QWidget):
cropbutton = QPushButton(qtawesome.icon("fa.crop"), "") cropbutton = QPushButton(qtawesome.icon("fa.crop"), "")
cropbutton.clicked.connect(self.crop) cropbutton.clicked.connect(self.crop)
self.audiopath = QLineEdit() self.audiopath = autoremovelineedit()
self.audiopath.setReadOnly(True) self.audiopath.setReadOnly(True)
self.audiopath_sentence = QLineEdit() self.audiopath_sentence = autoremovelineedit()
self.audiopath_sentence.setReadOnly(True) self.audiopath_sentence.setReadOnly(True)
self.editpath = QLineEdit() self.editpath = autoremovelineedit()
self.editpath.setReadOnly(True) self.editpath.setReadOnly(True)
self.viewimagelabel = QLabel() self.viewimagelabel = QLabel()
self.editpath.textChanged.connect(self.wrappedpixmap) self.editpath.textChanged.connect(self.wrappedpixmap)
@ -563,7 +583,6 @@ class AnkiWindow(QWidget):
self.editpath.clear() self.editpath.clear()
self.audiopath.clear() self.audiopath.clear()
self.audiopath_sentence.clear() self.audiopath_sentence.clear()
def errorwrap(self): def errorwrap(self):
try: try:
self.addanki() self.addanki()
@ -813,12 +832,15 @@ class searchwordW(closeashidewindow):
sentence = self.searchtext.text() + sentence sentence = self.searchtext.text() + sentence
self.searchtext.setText(sentence) self.searchtext.setText(sentence)
self.ankiwindow.example.setPlainText(gobject.baseobject.currenttext)
self.search(sentence) self.search(sentence)
self.ankiwindow.example.setPlainText(gobject.baseobject.currenttext)
if globalconfig["ankiconnect"]["autoruntts"]: if globalconfig["ankiconnect"]["autoruntts"]:
self.ankiwindow.langdu() self.ankiwindow.langdu()
self.ankiwindow.langdu2() self.ankiwindow.langdu2()
if globalconfig["ankiconnect"]["autocrop"]:
grabwindow(self.ankiwindow.editpath.setText)
def search(self, sentence): def search(self, sentence):
sentence = sentence.strip() sentence = sentence.strip()
if sentence == "": if sentence == "":

View File

@ -9,7 +9,7 @@ from myutils.wrapper import threader
@threader @threader
def grabwindow(): def grabwindow(callback=None):
fnamebase = "./cache/screenshot/{}".format(0) fnamebase = "./cache/screenshot/{}".format(0)
try: try:
@ -33,6 +33,8 @@ def grabwindow():
@threader @threader
def _(): def _():
winrtutils._winrt_capture_window(fname + "_winrt_magpie.png", hwnd) winrtutils._winrt_capture_window(fname + "_winrt_magpie.png", hwnd)
if callback and os.path.exists(fname + "_winrt_magpie.png"):
callback(os.path.abspath(fname + "_winrt_magpie.png"))
_() _()
hwnd = windows.FindWindow("LosslessScaling", None) hwnd = windows.FindWindow("LosslessScaling", None)
@ -41,32 +43,39 @@ def grabwindow():
@threader @threader
def _(): def _():
winrtutils._winrt_capture_window(fname + "_winrt_lossless.png", hwnd) winrtutils._winrt_capture_window(fname + "_winrt_lossless.png", hwnd)
if callback and os.path.exists(fname + "_winrt_lossless.png"):
callback(os.path.abspath(fname + "_winrt_lossless.png"))
_() _()
hwnd = windows.GetForegroundWindow()
try: try:
if hwnd == int(gobject.baseobject.translation_ui.winId()): hwnd = gobject.baseobject.textsource.hwnd
hwnd = gobject.baseobject.textsource.hwnd
except: except:
pass hwnd = windows.GetForegroundWindow()
@threader
def _():
winrtutils._winrt_capture_window(fname + "_winrt.png", hwnd)
_()
_ = windows.GetClientRect(hwnd) _ = windows.GetClientRect(hwnd)
rate = dynamic_rate(hwnd, _) rate = dynamic_rate(hwnd, _)
w, h = int(_[2] / rate), int(_[3] / rate) w, h = int(_[2] / rate), int(_[3] / rate)
print(_)
print(h, w, rate)
p = QApplication.primaryScreen().grabWindow(hwnd, 0, 0, w, h) p = QApplication.primaryScreen().grabWindow(hwnd, 0, 0, w, h)
p = p.toImage().copy(0, 0, w, h) p = p.toImage().copy(0, 0, w, h)
if not p.allGray(): if not p.allGray():
p.save(fname + "_gdi.png") p.save(fname + "_gdi.png")
gobject.baseobject.translation_ui.displaystatus.emit( if callback and os.path.exists(fname + "_gdi.png"):
"saved to " + fname, "red", True, True callback(os.path.abspath(fname + "_gdi.png"))
)
if not callback:
gobject.baseobject.translation_ui.displaystatus.emit(
"saved to " + fname, "red", True, True
)
@threader
def _():
winrtutils._winrt_capture_window(fname + "_winrt.png", hwnd)
if callback and os.path.exists(fname + "_winrt.png"):
callback(os.path.abspath(fname + "_winrt.png"))
if p.allGray() or (not callback):
_()
def dynamic_rate(hwnd, rect): def dynamic_rate(hwnd, rect):

View File

@ -193,7 +193,8 @@
"use":false, "use":false,
"keycode":120 "keycode":120
} }
} },
"autocrop":false
}, },
"ankiwindow": [ "ankiwindow": [
100, 100,
@ -363,7 +364,7 @@
}, },
"grabwindow": { "grabwindow": {
"use": false, "use": false,
"tip": "前景窗口截屏", "tip": "窗口截图",
"icon": "fa.camera" "icon": "fa.camera"
}, },
"resize": { "resize": {
@ -608,7 +609,7 @@
}, },
"_21": { "_21": {
"use": false, "use": false,
"name": "前景窗口截屏", "name": "窗口截图",
"keystring": "" "keystring": ""
}, },
"_22": { "_22": {

View File

@ -791,5 +791,7 @@
"编码": "ترميز", "编码": "ترميز",
"自动TTS": "التلقائي تحويل النص إلى كلام", "自动TTS": "التلقائي تحويل النص إلى كلام",
"使用webview显示": "عرض باستخدام WebView", "使用webview显示": "عرض باستخدام WebView",
"录音时模拟按键": "التناظرية مفتاح التسجيل" "录音时模拟按键": "التناظرية مفتاح التسجيل",
"窗口截图": "نافذة لقطة",
"自动截图": "لقطة التلقائي"
} }

View File

@ -791,5 +791,7 @@
"编码": "編碼", "编码": "編碼",
"自动TTS": "自動TTS", "自动TTS": "自動TTS",
"使用webview显示": "使用webview顯示", "使用webview显示": "使用webview顯示",
"录音时模拟按键": "錄音時類比按鍵" "录音时模拟按键": "錄音時類比按鍵",
"窗口截图": "視窗截圖",
"自动截图": "自動截圖"
} }

View File

@ -791,5 +791,7 @@
"编码": "coding", "编码": "coding",
"自动TTS": "Automatic TTS", "自动TTS": "Automatic TTS",
"使用webview显示": "Display using webview", "使用webview显示": "Display using webview",
"录音时模拟按键": "Simulate buttons during recording" "录音时模拟按键": "Simulate buttons during recording",
"窗口截图": "Window screenshot",
"自动截图": "Automatic screenshot"
} }

View File

@ -791,5 +791,7 @@
"编码": "Codificación", "编码": "Codificación",
"自动TTS": "TTS automático", "自动TTS": "TTS automático",
"使用webview显示": "Mostrar con Webview", "使用webview显示": "Mostrar con Webview",
"录音时模拟按键": "Teclas de simulación durante la grabación" "录音时模拟按键": "Teclas de simulación durante la grabación",
"窗口截图": "Captura de pantalla de la ventana",
"自动截图": "Captura de pantalla automática"
} }

View File

@ -791,5 +791,7 @@
"编码": "Codage", "编码": "Codage",
"自动TTS": "Tts automatique", "自动TTS": "Tts automatique",
"使用webview显示": "Afficher avec webview", "使用webview显示": "Afficher avec webview",
"录音时模拟按键": "Simulation des touches lors de l'enregistrement" "录音时模拟按键": "Simulation des touches lors de l'enregistrement",
"窗口截图": "Capture d'écran de la fenêtre",
"自动截图": "Capture d'écran automatique"
} }

View File

@ -791,5 +791,7 @@
"编码": "codifica", "编码": "codifica",
"自动TTS": "TTS automatico", "自动TTS": "TTS automatico",
"使用webview显示": "Visualizzazione tramite webview", "使用webview显示": "Visualizzazione tramite webview",
"录音时模拟按键": "Simula pulsanti durante la registrazione" "录音时模拟按键": "Simula pulsanti durante la registrazione",
"窗口截图": "Schermata finestra",
"自动截图": "Schermata automatica"
} }

View File

@ -791,5 +791,7 @@
"编码": "エンコード", "编码": "エンコード",
"自动TTS": "自動TTS", "自动TTS": "自動TTS",
"使用webview显示": "webview表示の使用", "使用webview显示": "webview表示の使用",
"录音时模拟按键": "録音時アナログボタン" "录音时模拟按键": "録音時アナログボタン",
"窗口截图": "ウィンドウのスクリーンショット",
"自动截图": "自動スクリーンショット"
} }

View File

@ -791,5 +791,7 @@
"编码": "인코딩", "编码": "인코딩",
"自动TTS": "자동 TTS", "自动TTS": "자동 TTS",
"使用webview显示": "웹뷰를 사용하여 표시", "使用webview显示": "웹뷰를 사용하여 표시",
"录音时模拟按键": "녹음 시 시뮬레이션 키" "录音时模拟按键": "녹음 시 시뮬레이션 키",
"窗口截图": "창 캡처",
"自动截图": "자동 캡처"
} }

View File

@ -791,5 +791,7 @@
"编码": "kodowanie", "编码": "kodowanie",
"自动TTS": "Automatyczny TTS", "自动TTS": "Automatyczny TTS",
"使用webview显示": "Wyświetlanie przy użyciu widoku internetowego", "使用webview显示": "Wyświetlanie przy użyciu widoku internetowego",
"录音时模拟按键": "Symulowanie przycisków podczas nagrywania" "录音时模拟按键": "Symulowanie przycisków podczas nagrywania",
"窗口截图": "Zrzut ekranu okna",
"自动截图": "Automatyczny zrzut ekranu"
} }

View File

@ -791,5 +791,7 @@
"编码": "Код", "编码": "Код",
"自动TTS": "Автоматический TTS", "自动TTS": "Автоматический TTS",
"使用webview显示": "Использовать webview", "使用webview显示": "Использовать webview",
"录音时模拟按键": "Клавиша моделирования при записи" "录音时模拟按键": "Клавиша моделирования при записи",
"窗口截图": "Снимок окна",
"自动截图": "Автоматический снимок экрана"
} }

View File

@ -791,5 +791,7 @@
"编码": "การเข้ารหัส", "编码": "การเข้ารหัส",
"自动TTS": "TTS อัตโนมัติ", "自动TTS": "TTS อัตโนมัติ",
"使用webview显示": "ใช้ webview เพื่อแสดงผล", "使用webview显示": "ใช้ webview เพื่อแสดงผล",
"录音时模拟按键": "การจำลองปุ่มกดเมื่อบันทึก" "录音时模拟按键": "การจำลองปุ่มกดเมื่อบันทึก",
"窗口截图": "ภาพหน้าจอของหน้าต่าง",
"自动截图": "ภาพหน้าจออัตโนมัติ"
} }

View File

@ -791,5 +791,7 @@
"编码": "coding", "编码": "coding",
"自动TTS": "Otomatik TTS", "自动TTS": "Otomatik TTS",
"使用webview显示": "Web görüntüsünü kullanarak göster", "使用webview显示": "Web görüntüsünü kullanarak göster",
"录音时模拟按键": "Kaydedirken düğmeleri simüle edin" "录音时模拟按键": "Kaydedirken düğmeleri simüle edin",
"窗口截图": "Window screenshot",
"自动截图": "Otomatik ekran fotoğrafı"
} }

View File

@ -791,5 +791,7 @@
"编码": "кодування", "编码": "кодування",
"自动TTS": "Автоматичний TTS", "自动TTS": "Автоматичний TTS",
"使用webview显示": "Показувати за допомогою веб- перегляду", "使用webview显示": "Показувати за допомогою веб- перегляду",
"录音时模拟按键": "Імітувати кнопки під час запису" "录音时模拟按键": "Імітувати кнопки під час запису",
"窗口截图": "Знімок вікна",
"自动截图": "Автоматичний знімок екрана"
} }

View File

@ -791,5 +791,7 @@
"编码": "Mã hóa", "编码": "Mã hóa",
"自动TTS": "Tự động TTS", "自动TTS": "Tự động TTS",
"使用webview显示": "Sử dụng WebView để hiển thị", "使用webview显示": "Sử dụng WebView để hiển thị",
"录音时模拟按键": "Mô phỏng các phím khi ghi âm" "录音时模拟按键": "Mô phỏng các phím khi ghi âm",
"窗口截图": "Ảnh chụp cửa sổ",
"自动截图": "Ảnh chụp màn hình tự động"
} }

View File

@ -87,7 +87,7 @@
"附加音源": "", "附加音源": "",
"图标2": "", "图标2": "",
"如果你感觉该软件对你有帮助,欢迎微信扫码赞助,谢谢~": "", "如果你感觉该软件对你有帮助,欢迎微信扫码赞助,谢谢~": "",
"前景窗口截屏": "", "窗口截图": "",
"OCR最短间隔时间(s)": "", "OCR最短间隔时间(s)": "",
"自动获取系统代理": "", "自动获取系统代理": "",
"是否使用快捷键": "", "是否使用快捷键": "",
@ -791,5 +791,7 @@
"编码": "", "编码": "",
"自动TTS": "", "自动TTS": "",
"使用webview显示": "", "使用webview显示": "",
"录音时模拟按键": "" "录音时模拟按键": "",
"前景窗口截屏": "",
"自动截图": ""
} }