Beim Schreiben von Code in Python usw. fällt mir oft kein englisches Wort für Variablennamen ein. Bis jetzt habe ich den Browser gestartet und eine Google-Übersetzung durchgeführt, aber heutzutage bin ich etwas nervig. Ich habe ein einfaches Übersetzungswerkzeug nur für Japanisch-Englisch erstellt, um mich ohne Englischkenntnisse zu unterstützen. ↑ Das fertige Produkt sieht so aus. Wir haben ein Tool angestrebt, das so schnell wie möglich und mit wenigen Vorgängen ausgeführt werden kann. Die wesentliche Übersetzungsfunktion nutzt die googletrans-Bibliothek. Ich habe es nicht neu verwendet, daher werde ich die Erklärung weglassen. Referenzseite ⇒ Python - Ich habe Googletrans ausprobiert.
Windows10 Home Python3.8.2(32bit) Visual Studio Code 1.45.1
from ctypes import windll
from tkinter import Tk,Entry,Label
import tkinter as tk
from googletrans import Translator #Externe Bibliothek
import win32gui #Externe Bibliothek
import pyperclip #Externe Bibliothek
import pyautogui #Externe Bibliothek
#Konvertiert oder nicht Flag
translated_flg = False
#Funktion zum Einschalten von IME--------------------------------------------------
def imm_on(event):
hWnd = win32gui.GetForegroundWindow() #Aktives Fenster abrufen
himc = windll.LoadLibrary("imm32").ImmGetContext(hWnd) #Kontext abrufen
windll.LoadLibrary("imm32").ImmSetOpenStatus(himc, 1) #Aktivieren Sie IME im erfassten Kontext
windll.LoadLibrary("imm32").ImmReleaseContext(hWnd, himc) #Freier Kontext
#Funktion, die die Übersetzungsverarbeitung ausführt--------------------------------------------------
def translate_jp(japanese):
global translated_flg
#IF zur Beurteilung der kontinuierlichen Verarbeitung
if translated_flg == True:
root.destroy() #Fertig stellen, wenn bereits konvertiert
else:
#Bearbeitungsdatum der Übersetzung (ja) ⇒ Englisch (en)
english = Translator().translate(japanese, src="ja", dest="en")
#Ändern Sie die Schriftart und Farbe des Konvertierungsetiketts
translated["font"] = ("segoe UI",14)
translated["foreground"] = "black"
#Aktualisieren Sie den String (StringVar) in jedem Label
trans_var.set("「 "+english.text.lower()+" 」") #In Kleinbuchstaben konvertieren
ex_var.set("Drücken Sie erneut die Eingabetaste, um den Vorgang zu beenden")
#In Clip kopieren
pyperclip.copy(english.text.lower()) #In Kleinbuchstaben konvertieren
translated_flg = True
#Funktion, die die Initialisierungsverarbeitung ausführt--------------------------------------------------
def initialize(event):
global translated_flg
#Aktualisieren Sie den String (StringVar) in jedem Label
trans_var.set(""Der konvertierte Japaner wird hier angezeigt."")
ex_var.set("Bitte geben Sie das Japanisch ein, das Sie übersetzen möchten")
#Ändern Sie die Schriftart und Farbe des Konvertierungsetiketts
translated["font"] = ("Meiryo UI",8)
translated["foreground"] = "gray"
#Falsch übersetzte Flagge
translated_flg = False
#Hauptverarbeitungseinheit--------------------------------------------------
#tk Vorbereiten des Zeichnens eines Fensters
root = Tk()
root.geometry("+600+400") #Position der Fensterzeichnung
root.option_add("*font",("Meiryo UI",14))
root.title("Einfache Übersetzung (Japanisch ⇒ Englisch)")
#Bereiten Sie die Zeichenfolgenvariable StringVar für tk vor
ex_var = tk.StringVar()
ex_var.set("Bitte geben Sie das Japanisch ein, das Sie übersetzen möchten")
trans_var = tk.StringVar()
trans_var.set(""Der konvertierte Japaner wird hier angezeigt."")
#Oberes Etikett (Etikett)_1) Zeichnen
label_1 = Label(root,textvariable=ex_var,font=("Meiryo UI",8))
label_1.pack(pady=10) #Anordnung (oberer und unterer Rand 10px)
#Japanischer Eingabeeintrag (jp_Eingabe) Zeichnung
jp_input = Entry(root, width="14")
jp_input.pack(padx=10) #Anordnung (linker und rechter Rand 10px) de
jp_input.focus_set() #Geben Sie die anfängliche Fokusposition an
#Etikettenzeichnung des unteren Etiketts (übersetzt)
translated = Label(root,textvariable=trans_var,font=("Meiryo UI",8))
translated["foreground"] = "gray"
translated.pack(padx=10,pady=10)
# jp_imm, wenn die Eingabe gezeichnet wird_bei Funktionsausführung
jp_input.bind("<Expose>", imm_on)
# jp_Funktionsausführung, wenn bei der Eingabe die Eingabetaste gedrückt wird
#Da bind nur die Rückruffunktion ausführen kann, übergeben Sie das Argument als Lambda-Ausdruck
jp_input.bind("<Return>", lambda f:translate_jp(jp_input.get()))
# jp_Führen Sie die Initialisierungsfunktion aus, wenn eine Taste in der Eingabe gedrückt wird
jp_input.bind("<Key>",initialize)
#tk Fensterzeichnung
root.mainloop()
#Nach dem Ende "Alt"+Fenster mit "Tab" wechseln (zum letzten aktiven Fenster zurückkehren)
pyautogui.hotkey("Alt","Tab",interval=0.05)
Dieses Mal habe ich eine Batchdatei für den Start erstellt und eine Tastenkombination festgelegt, damit sie auf einmal gestartet werden kann.
Anlaufen.Fledermaus (Beispiel)
@echo off
start /min C:\Python\Python38-32\python.exe C:\Users\aaa\Desktop\python\Einfaches Übersetzungstool (Japanisch und Englisch).py
(1) Erstellen Sie den obigen Befehl mit Notepad usw. und speichern Sie ihn mit der Erweiterung .bat. (Im obigen Fall sind 2-Byte-Zeichen enthalten, daher musste der Zeichencode in ANSI geändert und gespeichert werden.) (2) Erstellen Sie an einer beliebigen Stelle eine Verknüpfung für die erstellte Bat-Datei ③ Klicken Sie mit der rechten Maustaste auf die Verknüpfung ⇒ "Eigenschaften" ⇒ Stellen Sie sie auf der Registerkarte "Verknüpfung" über "Tastenkombination" ein
Fühle mich wie. Dies ermöglicht das Starten und Ausführen von Verknüpfungen für py-Dateien mit einem beliebigen Schlüssel. Durch Eingabe von "start / min ~" in die bat-Datei wird der Konsolenbildschirm minimiert, sodass das Tool gestartet werden kann. (Eigentlich wollte ich es zu einer Exe machen, aber aus irgendeinem Grund funktioniert die Konvertierung mit Pyinstaller nicht ...)
Da es sich bei diesem Tool um eine japanische Übersetzung handelt, wird es nur verwendet, wenn der grundlegende IME eingeschaltet ist (japanischer Eingabemodus).
Das tk-Fenster beginnt jedoch immer mit ausgeschaltetem IME.
Daher muss ich die Taste mit der halben Breite drücken, um IME zu wechseln, was etwas problematisch ist.
Daher habe ich versucht, IME gleichzeitig mit dem Starten des Tools automatisch einzuschalten.
Geben Sie zunächst ".focus_set ()" für das von tkinter erstellte Eintrags-Widget an. Die Eingabe ist gleichzeitig mit dem Start möglich.
Wenn die Ereignissequenz von bind als "
hWnd = win32gui.GetForegroundWindow() #Aktives Fenster abrufen
himc = windll.LoadLibrary("imm32").ImmGetContext(hWnd) #Kontext abrufen
windll.LoadLibrary("imm32").ImmSetOpenStatus(himc, 1) #Aktivieren Sie IME im erfassten Kontext
windll.LoadLibrary("imm32").ImmReleaseContext(hWnd, himc) #Freier Kontext
(Obwohl ich immer noch ein schlechtes Verständnis von Windll habe, konnte ich IME oben vorerst einschalten.)
Der Exit-Vorgang des Tools ist ebenfalls einfach, sodass Sie ihn nur mit der ** Eingabetaste ** beenden können. (Ich wollte vermeiden, mit einer Taste zu beenden, da dies zusätzliche Mausbewegungen verursacht.) Wenn Sie die Eingabetaste (Return) drücken, setzen Sie zuerst das Beurteilungsflag translate_flg auf True und setzen Sie es auf True. Wenn in diesem Zustand die Eingabetaste weiter gedrückt wird, wird der Beendigungsprozess "root.destroy ()" ausgeführt. Wenn der Inhalt des Widgets mit BackSpace usw. aktualisiert wird, wird das Flag außerdem initialisiert.
Nach dem Beenden geht der Fokus des Fensters verloren, das beim Start aktiv war. Zum ursprünglichen Fenster zurückkehren Mit `pyautogui.hotkey (" Alt "," Tab ", Intervall = 0,05)" wird die Windows-Tastenkombination "Alt" + "Tab" gedrückt und ** Führen Sie automatisch eine aktive Umschaltung auf das Fenster durch, an dem Sie gearbeitet haben **. Diese Methode verwendet jedoch nur die Spezifikation, dass das Fenster, das über die Verknüpfung umgeschaltet wird, zu dem Fenster zurückkehrt, das unmittelbar zuvor aktiv war, und funktioniert je nach Umgebung möglicherweise nicht. (Wenn jemand einen guten Weg kennt, lass es mich wissen)
Außerdem wird das zuletzt übersetzte Ergebnis am Ende in die Zwischenablage kopiert. Nach dem Übergang zum ursprünglichen Fenster kann das Übersetzungsergebnis mit nur Strg + V eingefügt werden.
Zuerst hatte ich vor, etwas Einfaches zu tun, um Werkzeuge herzustellen, aber unterwegs nahm ich einige Änderungen vor und nahm einige Änderungen vor. Es hat viel Zeit und Mühe gekostet. .. (Ich habe viel daraus gelernt) Die Überlegung ist, dass ich, wie ich im Text schrieb, es aus irgendeinem Grund nicht zu einer Exe von Pyinstaller machen konnte, also habe ich Fledermaus verwendet. Vielleicht deshalb der Eindruck, dass es eine Weile gedauert hat, das Tool zu starten. .. Ich möchte diesen Bereich untersuchen, wenn ich Zeit habe.
Ich habe dieses Mal zum ersten Mal versucht, eine GUI mit tkinter zu erstellen, aber die folgenden Websites waren sehr hilfreich. ⇒ Einführung in Easy Python / Tkinter Während es nur wenige Sites gab, die als Referenz für Ereignissequenzen verwendet werden konnten, waren die folgenden Sites nützlich. ⇒ Tkinter-Bindung und Ereignissequenz
Recommended Posts