[GO] [Python] Einfaches Japanisch ⇒ Ich habe versucht, ein englisches Übersetzungswerkzeug zu erstellen

Was du machen willst

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. 簡易翻訳ツールデモ.gif ↑ 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.

Umgebung

Windows10 Home Python3.8.2(32bit) Visual Studio Code 1.45.1

Code-Inhalt

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)

Geniale Punkte

Beginnen Sie mit einer Tastenkombination

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 ...)

Automatisches Umschalten des IME-Eingangsmodus

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 "" angegeben ist und das Widget gezeichnet wird. Geändert, um die Funktion auszuführen, die IME automatisch aktiviert, wenn das Fenster gestartet wird (dh wenn das Fenster gestartet wird). Der Code zum Einschalten von IME lautet wie folgt.

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.)

Einfallsreichtum am Ende (Ende durch einfache Bedienung, automatischen Fensterübergang usw.)

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.

Zurückblicken

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.

Referenz

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

[Python] Einfaches Japanisch ⇒ Ich habe versucht, ein englisches Übersetzungswerkzeug zu erstellen
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Fortsetzung ・ Ich habe versucht, Slackbot zu erstellen, nachdem ich Python3 studiert habe
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich habe versucht, eine OCR-App mit PySimpleGUI zu erstellen
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen
Ich habe verschiedene Methoden ausprobiert, um japanische Post mit Python zu senden
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich habe versucht, englische Untertitel mit Udemy gewaltsam ins Japanische zu übersetzen
Ich habe mit PyQt einen einfachen Texteditor erstellt
Ich habe versucht, Python zu berühren (Installation)
Ich habe versucht, eine Aktivität zu erstellen, die gemeinsam die Positionsinformationen festlegt
Rubyist hat versucht, eine einfache API mit Python + Flasche + MySQL zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Datum" zu erstellen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich habe versucht, in 3 Jahren 5 Muster der Analysebasis zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Ich habe versucht, das automatische Senden einer E-Mail durch Doppelklicken auf das Symbol [Python] zu ermöglichen
Ich habe versucht, PLSA in Python 2 zu implementieren
Python3-Standardeingabe habe ich versucht zusammenzufassen
Ich habe versucht, PPO in Python zu implementieren
Ich möchte ein Automatisierungsprogramm erstellen!
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
Ich habe eine Web-API erstellt
[Python] Ich habe versucht, TF-IDF stetig zu berechnen
Ich habe versucht, Python zu berühren (grundlegende Syntax)
Ich habe versucht, eine Originalsprache "PPAP Script" zu erstellen, die PPAP (Pen Pineapple Appo Pen) mit Python abbildet
[Python] Ich habe versucht, den kollektiven Typ (Satz) auf leicht verständliche Weise zusammenzufassen.
Ich habe mit TWE-Lite-2525A einen Öffnungs- / Schließsensor (Twitter-Link) erstellt
[AWS] [GCP] Ich habe versucht, die Verwendung von Cloud-Diensten mit Python zu vereinfachen
Hinweise Ich habe nachgeschlagen, um Befehlszeilentools in Python zu erstellen
[Zaif] Ich habe versucht, den Handel mit virtuellen Währungen mit Python zu vereinfachen
[Lambda] Ich habe versucht, ein externes Python-Modul über S3 zu integrieren
Ich überarbeitete "Ich habe versucht, Othello AI zu machen, als Programmieranfänger Python studierten"
[Python] Als ich versuchte, ein Dekomprimierungswerkzeug mit einer Zip-Datei zu erstellen, die ich gerade kannte, war ich süchtig nach sys.exit ()
Ich habe versucht, das automatische Senden einer E-Mail durch Doppelklicken auf das Symbol [GAS / Python] zu ermöglichen
Ich habe versucht, durch Schaben ein Bild zu bekommen
Ich möchte ein Spiel mit Python machen
[Automatische Übersetzung] Tool zur Unterstützung der englischen Eingabe Translation-chan [Python]
Ich habe versucht, LLVM IR mit Python auszugeben
Python-Anfänger Nr. 1 stellen einfache Tools zum Lernen von englischen Wörtern her
Ich habe versucht, KI für Smash Bra zu machen
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Ich habe versucht, ein Objekt mit M2Det zu erkennen!
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren