Dieses Programm ist noch in Bearbeitung
Oder in einer pickle
from tkinter import *
import pickle
import re
import tkinter.messagebox
# Dictionary initialisieren
try:
russisch_dict = {
"сбн.": "fM",
"уб": "Abn",
"пр.": "Zun"
}
except Exception as e:
tkinter.messagebox.showerror(title="Fehler", message=f"Fehler beim Initialisieren: {str(e)}")
# Speichern des Dictionaries
with open('russisch-dict.pkl', 'wb') as f:
pickle.dump(russisch_dict, f)
def hinzufuegen():
# Werte aus den Eingabefeldern holen
russisch = eingabefeld_russisch.get("1.0", END).strip()
deutsch = eingabefeld_deutsch.get("1.0", END).strip()
# Überprüfen, ob beide Felder ausgefüllt sind
if russisch and deutsch:
russisch_dict[russisch] = deutsch # Eintrag ins Dictionary hinzufügen
print(f"Eintrag hinzugefügt: {russisch} -> {deutsch}")
tkinter.messagebox.showinfo(title="Eintrag ok", message="Eintrag erfolgreich hinzugefügt")
print("Aktuelles Dictionary:", russisch_dict)
# Felder leeren
eingabefeld_russisch.delete("1.0", END)
eingabefeld_deutsch.delete("1.0", END)
# Dictionary nach jedem Hinzufügen speichern
with open('russisch-dict.pkl', 'wb') as f:
pickle.dump(russisch_dict, f)
else:
print("Bitte beide Felder ausfüllen!")
def uebersetzen():
# Eingabetext aus dem Eingabefeld holen
eingabe_text = eingabefeld.get("1.0", END).strip()
# Text in Zeilen aufteilen
zeilen = eingabe_text.split('\n')
uebersetzt = []
for zeile in zeilen:
# Teile jede Zeile in Elemente
elemente = re.findall(r'\d+pb-?|\d+aum|an\.mág\.de|\w+\.?|\([^)]*\)|:', zeile)
uebersetzt_zeile = []
for element in elemente:
if element.isdigit() or element == ':' or element.startswith('('):
uebersetzt_zeile.append(element)
else:
# Übersetze zusammengesetzte Elemente
uebersetztes_element = element
for key, value in russisch_dict.items():
uebersetztes_element = uebersetztes_element.replace(key, value)
uebersetzt_zeile.append(uebersetztes_element)
uebersetzt.append(' '.join(uebersetzt_zeile))
ergebnis = '\n'.join(uebersetzt)
ausgabefeld.delete("1.0", END)
ausgabefeld.insert(END, ergebnis)
def felder_loeschen():
eingabefeld.delete("1.0", END)
ausgabefeld.delete("1.0", END)
def kopieren():
root.clipboard_clear()
root.clipboard_append(ausgabefeld.get("1.0", END))
# GUI erstellen
root = Tk()
root.title("Häkelanleitung Übersetzer")
root.geometry("500x1000")
eingabefeld = Text(root, height=20, width=50)
eingabefeld.pack(pady=10)
top_frame = Frame(root)
top_frame.pack(pady=5)
# Buttons in der oberen Reihe
bestaetigung = Button(top_frame, text="Auf deutsch übersetzen", command=uebersetzen)
bestaetigung.pack(side=LEFT, padx=5)
kopieren_button = Button(top_frame, text="Übersetzung kopieren", command=kopieren)
kopieren_button.pack(side=LEFT, padx=5)
loeschen_button = Button(top_frame, text="Eingaben löschen", command=felder_loeschen)
loeschen_button.pack(side=LEFT, padx=5)
# Abbrechen-Button in einer separaten Reihe
abbrechen_button = Button(root, text="Abbrechen", command=root.destroy)
abbrechen_button.pack(pady=5)
# Ausgabefeld
ausgabefeld = Text(root, height=20, width=50)
ausgabefeld.pack(pady=10)
Label(root, text="russischer Begriff:").pack(pady=5)
eingabefeld_russisch = Text(root, height=2, width=30)
eingabefeld_russisch.pack(pady=10)
Label(root, text="Deutsche Übersetzung:").pack(pady=5)
eingabefeld_deutsch = Text(root, height=2, width=30)
eingabefeld_deutsch.pack(pady=10)
Button(root, text="Hinzufügen", command=hinzufuegen).pack(pady=10)
root.mainloop()
Hinweis : der gesamte Code passt nicht mehr auf eine Seite des Visual Studio Code. Da die Farbmarkierung aber zur Übersicht beiträgt hab ich mehrere Screens gemacht.



Eine Option hinzufügen mit denen die Einträge des Dictonarys angezeigt werden können.
from tkinter import *
import tkinter as tk
import pickle
import re
import tkinter.messagebox
# Dictionary initialisieren
try:
russisch_dict = {
"сбн.": "fM",
"уб": "Abn",
"пр.": "Zun"
}
except Exception as e:
tkinter.messagebox.showerror(title="Fehler", message=f"Fehler beim Initialisieren: {str(e)}")
# Speichern des Dictionaries
with open('russisch-dict.pkl', 'wb') as f:
pickle.dump(russisch_dict, f)
def hinzufuegen():
# Werte aus den Eingabefeldern holen
russisch = eingabefeld_russisch.get("1.0", END).strip()
deutsch = eingabefeld_deutsch.get("1.0", END).strip()
# Überprüfen, ob beide Felder ausgefüllt sind
if russisch and deutsch:
russisch_dict[russisch] = deutsch # Eintrag ins Dictionary hinzufügen
print(f"Eintrag hinzugefügt: {russisch} -> {deutsch}")
tkinter.messagebox.showinfo(title="Eintrag ok", message="Eintrag erfolgreich hinzugefügt")
print("Aktuelles Dictionary:", russisch_dict)
# Felder leeren
eingabefeld_russisch.delete("1.0", END)
eingabefeld_deutsch.delete("1.0", END)
# Dictionary nach jedem Hinzufügen speichern
with open('russisch-dict.pkl', 'wb') as f:
pickle.dump(russisch_dict, f)
else:
print("Bitte beide Felder ausfüllen!")
def uebersetzen():
# Eingabetext aus dem Eingabefeld holen
eingabe_text = eingabefeld.get("1.0", END).strip()
# Text in Zeilen aufteilen
zeilen = eingabe_text.split('\n')
uebersetzt = []
for zeile in zeilen:
# Teile jede Zeile in Elemente
elemente = re.findall(r'\d+pb-?|\d+aum|an\.mág\.de|\w+\.?|\([^)]*\)|:', zeile)
uebersetzt_zeile = []
for element in elemente:
if element.isdigit() or element == ':' or element.startswith('('):
uebersetzt_zeile.append(element)
else:
# Übersetze zusammengesetzte Elemente
uebersetztes_element = element
for key, value in russisch_dict.items():
uebersetztes_element = uebersetztes_element.replace(key, value)
uebersetzt_zeile.append(uebersetztes_element)
uebersetzt.append(' '.join(uebersetzt_zeile))
ergebnis = '\n'.join(uebersetzt)
ausgabefeld.delete("1.0", END)
ausgabefeld.insert(END, ergebnis)
def felder_loeschen():
eingabefeld.delete("1.0", END)
ausgabefeld.delete("1.0", END)
def kopieren():
root.clipboard_clear()
root.clipboard_append(ausgabefeld.get("1.0", END))
def show_dictionary():
try:
with open('russisch-dict.pkl', 'rb') as f:
loaded_dict = pickle.load(f)
popup = tk.Toplevel()
popup.title("Dictionary Inhalt")
text_widget = tk.Text(popup, wrap=tk.WORD, width=40, height=20)
text_widget.pack(padx=10, pady=10)
for key, value in loaded_dict.items():
text_widget.insert(tk.END, f"{key}: {value}\n")
text_widget.config(state=tk.DISABLED)
except FileNotFoundError:
messagebox.showerror("Fehler", "Die Dictionary-Datei wurde nicht gefunden.")
except Exception as e:
messagebox.showerror("Fehler", f"Fehler beim Laden des Dictionaries: {str(e)}")
# GUI erstellen
root = Tk()
root.title("Häkelanleitung Übersetzer")
root.geometry("500x1000")
eingabefeld = Text(root, height=20, width=50)
eingabefeld.pack(pady=10)
top_frame = Frame(root)
top_frame.pack(pady=5)
# Buttons in der oberen Reihe
bestaetigung = Button(top_frame, text="Auf deutsch übersetzen", command=uebersetzen)
bestaetigung.pack(side=LEFT, padx=5)
kopieren_button = Button(top_frame, text="Übersetzung kopieren", command=kopieren)
kopieren_button.pack(side=LEFT, padx=5)
loeschen_button = Button(top_frame, text="Eingaben löschen", command=felder_loeschen)
loeschen_button.pack(side=LEFT, padx=5)
# Abbrechen-Button in einer separaten Reihe
abbrechen_button = Button(root, text="Abbrechen", command=root.destroy)
abbrechen_button.pack(pady=5)
# Ausgabefeld
ausgabefeld = Text(root, height=20, width=50)
ausgabefeld.pack(pady=10)
Label(root, text="russischer Begriff:").pack(pady=5)
eingabefeld_russisch = Text(root, height=2, width=30)
eingabefeld_russisch.pack(pady=10)
Label(root, text="Deutsche Übersetzung:").pack(pady=5)
eingabefeld_deutsch = Text(root, height=2, width=30)
eingabefeld_deutsch.pack(pady=10)
Button(root, text="Hinzufügen", command=hinzufuegen).pack(pady=10)
# Button zum Anzeigen des Dictionaries
show_dict_button = Button(root, text="Dictionary anzeigen", command=show_dictionary)
show_dict_button.pack(pady=5)
root.mainloop()


Das Dictonary soll aktualisiert werden wenn der Eintrag hinzugefügt wurde, damit das Programm nicht immer neu gestartet werden muss
Ich habe noch ein Kontextmenü hinzugefügt und auf json umgestellt
from tkinter import *
import tkinter as tk
import json
import re
import tkinter.messagebox
# Dictionary initialisieren
try:
with open('russisch-dict.json', 'r', encoding='utf-8') as f:
russisch_dict = json.load(f)
except FileNotFoundError:
russisch_dict = {
"сбн.": "fM",
"уб": "Abn",
"пр.": "Zun"
}
with open('russisch-dict.json', 'w', encoding='utf-8') as f:
json.dump(russisch_dict, f, ensure_ascii=False, indent=4)
except Exception as e:
tkinter.messagebox.showerror(title="Fehler", message=f"Fehler beim Initialisieren: {str(e)}")
def hinzufuegen():
# Werte aus den Eingabefeldern holen
russisch = eingabefeld_russisch.get("1.0", END).strip()
deutsch = eingabefeld_deutsch.get("1.0", END).strip()
# Überprüfen, ob beide Felder ausgefüllt sind
if russisch and deutsch:
russisch_dict[russisch] = deutsch # Eintrag ins Dictionary hinzufügen
print(f"Eintrag hinzugefügt: {russisch} -> {deutsch}")
tkinter.messagebox.showinfo(title="Eintrag ok", message="Eintrag erfolgreich hinzugefügt")
print("Aktuelles Dictionary:", russisch_dict)
# Felder leeren
eingabefeld_russisch.delete("1.0", END)
eingabefeld_deutsch.delete("1.0", END)
# Dictionary nach jedem Hinzufügen speichern
with open('russisch-dict.json', 'w', encoding='utf-8') as f:
json.dump(russisch_dict, f, ensure_ascii=False, indent=4)
else:
print("Bitte beide Felder ausfüllen!")
def uebersetzen():
# Eingabetext aus dem Eingabefeld holen
eingabe_text = eingabefeld.get("1.0", END).strip()
# Text in Zeilen aufteilen
zeilen = eingabe_text.split('\n')
uebersetzt = []
for zeile in zeilen:
# Teile jede Zeile in Elemente
elemente = re.findall(r'\d+pb-?|\d+aum|an\.mág\.de|\w+\.?|\([^)]*\)|:', zeile)
uebersetzt_zeile = []
for element in elemente:
if element.isdigit() or element == ':' or element.startswith('('):
uebersetzt_zeile.append(element)
else:
# Übersetze zusammengesetzte Elemente
uebersetztes_element = element
for key, value in russisch_dict.items():
uebersetztes_element = uebersetztes_element.replace(key, value)
uebersetzt_zeile.append(uebersetztes_element)
uebersetzt.append(' '.join(uebersetzt_zeile))
ergebnis = '\n'.join(uebersetzt)
ausgabefeld.delete("1.0", END)
ausgabefeld.insert(END, ergebnis)
def felder_loeschen():
eingabefeld.delete("1.0", END)
ausgabefeld.delete("1.0", END)
def kopieren():
root.clipboard_clear()
root.clipboard_append(ausgabefeld.get("1.0", END))
def show_dictionary():
try:
with open('russisch-dict.json', 'r', encoding='utf-8') as f:
loaded_dict = json.load(f)
popup = tk.Toplevel()
popup.title("Dictionary Inhalt")
text_widget = tk.Text(popup, wrap=tk.WORD, width=40, height=20)
text_widget.pack(padx=10, pady=10)
for key, value in loaded_dict.items():
text_widget.insert(tk.END, f"{key}: {value}\n")
text_widget.config(state=tk.DISABLED)
except FileNotFoundError:
messagebox.showerror("Fehler", "Die Dictionary-Datei wurde nicht gefunden.")
except Exception as e:
messagebox.showerror("Fehler", f"Fehler beim Laden des Dictionaries: {str(e)}")
import tkinter as tk
def create_popup_menu(widget):
menu = tk.Menu(widget, tearoff=0)
menu.add_command(label="Ausschneiden", command=lambda: widget.event_generate("<<Cut>>"))
menu.add_command(label="Kopieren", command=lambda: widget.event_generate("<<Copy>>"))
menu.add_command(label="Einfügen", command=lambda: widget.event_generate("<<Paste>>"))
return menu
def show_popup_menu(event):
widget = event.widget
menu = create_popup_menu(widget)
menu.tk_popup(event.x_root, event.y_root)
#GUI
root = Tk()
root.title("Häkelanleitung Übersetzer")
root.geometry("500x1000")
text_field = tk.Text(root)
text_field.pack()
text_field.bind("<Button-3>", show_popup_menu)
eingabefeld = Text(root, height=20, width=50)
eingabefeld.pack(pady=10)
top_frame = Frame(root)
top_frame.pack(pady=5)
# Buttons in der oberen Reihe
bestaetigung = Button(top_frame, text="Auf deutsch übersetzen", command=uebersetzen)
bestaetigung.pack(side=LEFT, padx=5)
kopieren_button = Button(top_frame, text="Übersetzung kopieren", command=kopieren)
kopieren_button.pack(side=LEFT, padx=5)
loeschen_button = Button(top_frame, text="Eingaben löschen", command=felder_loeschen)
loeschen_button.pack(side=LEFT, padx=5)
# Abbrechen-Button in einer separaten Reihe
abbrechen_button = Button(root, text="Abbrechen", command=root.destroy)
abbrechen_button.pack(pady=5)
# Ausgabefeld
ausgabefeld = Text(root, height=20, width=50)
ausgabefeld.pack(pady=10)
Label(root, text="russischer Begriff:").pack(pady=5)
eingabefeld_russisch = Text(root, height=2, width=30)
eingabefeld_russisch.pack(pady=10)
Label(root, text="Deutsche Übersetzung:").pack(pady=5)
eingabefeld_deutsch = Text(root, height=2, width=30)
eingabefeld_deutsch.pack(pady=10)
Button(root, text="Hinzufügen", command=hinzufuegen).pack(pady=10)
# Button zum Anzeigen des Dictionaries
show_dict_button = Button(root, text="Dictionary anzeigen", command=show_dictionary)
show_dict_button.pack(pady=5)
# Beispielaufruf
show_dictionary()
# GUI erstellen
root.mainloop()