Typeitin mit tkinter

Hier entwickle ich mit Python und tkinter eine einfache Anwendung zur Erstellung von Buttons, die eine Einfügung in die Zwischenablage ermöglicht. Bitte beachten: ich erstelle erst das Design und dann die technischen Möglichkeiten / Zusammenhänge

  1. Erforderliche Widgets importieren:
from tkinter import *
import tkinter as tk
import os

2. einfaches Fenster erstellen:

root=Tk()
root.geometry("300x400")
root.mainloop()

3. Eingabefelder einfügen:

from tkinter import *
import tkinter as tk
root=Tk()
kurzbezeichnung = tk.Entry(root)
kurzbezeichnung.pack()
textfeld = tk.Text(master=root, width=39, height=4)
textfeld.pack()

root.geometry("300x400")
root.mainloop()

Text für die Eingabefelder einfügen:

import tkinter as tk

root = tk.Tk()

# Erstes Label
label1 = tk.Label(root, text="Kurzbezeichnung einfügen:")
label1.pack()

# Eingabefeld
kurzbezeichnung = tk.Entry(root)
kurzbezeichnung.pack()

# Zweites Label unter dem Eingabefeld
label2 = tk.Label(root, text="Dazugehörigen Text eingeben:")
label2.pack()

# Textfeld
textfeld = tk.Text(master=root, width=39, height=4, wrap='word')
textfeld.pack()

root.geometry("300x400")
root.mainloop()

root.mainloop()

Button hinzufügen

import tkinter as tk

root = tk.Tk()

# Erstes Label
label1 = tk.Label(root, text="Kurzbezeichnung einfügen:")
label1.pack()

# Eingabefeld
kurzbezeichnung = tk.Entry(root)
kurzbezeichnung.pack()

# Zweites Label unter dem Eingabefeld
label2 = tk.Label(root, text="Dazugehörigen Text eingeben:")
label2.pack()

# Textfeld
textfeld = tk.Text(master=root, width=39, height=4, wrap='word')
textfeld.pack()
#Button mit verknüpftem command:
ok_button = tk.Button(root, text="OK", command=ok_action)
ok_button.pack(padx=20, pady=20)

root.geometry("300x400")
root.mainloop()

root.mainloop()

Speichern Button hinzufügen
(hier sollen die Einträge in einer Datei gespeichert werden – wird noch hinzugefügt)

def ok_action():
    print("OK-Button gedrückt")

def save_action():
    print ("Wird noch eingerichtet")

import tkinter as tk
import os
root = tk.Tk()

# Erstes Label
label1 = tk.Label(root, text="Kurzbezeichnung einfügen:")
label1.pack()

# Eingabefeld
kurzbezeichnung = tk.Entry(root)
kurzbezeichnung.pack()

# Zweites Label unter dem Eingabefeld
label2 = tk.Label(root, text="Dazugehörigen Text eingeben:")
label2.pack()

# Textfeld
textfeld = tk.Text(master=root, width=39, height=4, wrap='word')
textfeld.pack()
#Button mit verknüpftem command:
ok_button = tk.Button(root, text="OK", command=ok_action)
ok_button.pack(padx=20, pady=20)

speichern_button=tk.Button(root, text="Speichern", command=save_action)
speichern_button.pack()

root.geometry("300x400")
root.mainloop()

root.mainloop()

Einen Exit Button erstellen

import tkinter as tk
from tkinter import Menu, filedialog, messagebox
import json

def exit_action():
    root.quit()

def save_button_data(text, x, y):
    try:
        try:
            with open("buttons.txt", "r", encoding="utf-8") as f:
                buttons = json.load(f)
        except FileNotFoundError:
            buttons = []
        buttons.append({"text": text, "x": x, "y": y})
        with open("buttons.txt", "w", encoding="utf-8") as f:
            json.dump(buttons, f)
    except Exception as e:
        print(f"Fehler beim Speichern der Buttons: {e}")

def create_button(event):
    bezeichnung = kurzbezeichnung.get()
    btn = tk.Button(root, text=bezeichnung)
    btn.place(x=event.x, y=event.y)
    save_button_data(bezeichnung, event.x, event.y)

def load_buttons():
    try:
        with open("buttons.txt", "r", encoding="utf-8") as f:
            buttons = json.load(f)
        for btn in buttons:
            b = tk.Button(root, text=btn["text"])
            b.place(x=btn["x"], y=btn["y"])
    except FileNotFoundError:
        pass
    except Exception as e:
        print(f"Fehler beim Laden der Buttons: {e}")


def exit_app():
    root.quit()

def save_action():
    kurz = kurzbezeichnung.get()  # Inhalt des Entry-Felds
    text = textfeld.get("1.0", "end-1c")  # Inhalt des Textfelds
    try:
        with open("eingaben.txt", "a", encoding="utf-8") as f:  # 'a' für Anhängen!
            f.write("Kurzbezeichnung:\n")
            f.write(kurz + "\n\n")
            f.write("Text:\n")
            f.write(text + "\n")
            f.write("-" * 40 + "\n")
        print("Eingaben wurden gespeichert.")
    except Exception as e:
        print(f"Fehler beim Speichern: {e}")

def copy_text_to_clipboard():
    text = textfeld.get("1.0", "end-1c")
    root.clipboard_clear()
    root.clipboard_append(text)
    root.update()        

root = tk.Tk()
root.geometry("300x400")
# Menüleiste erstellen
menubar = Menu(root)
root.config(menu=menubar)
datei_menu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Datei", menu=datei_menu)

datei_menu.add_command(label="Speichern unter...", command=save_action)
datei_menu.add_separator()
datei_menu.add_command(label="Beenden", command=exit_app)

# Rechtsklick auf das Fenster erzeugt einen neuen Button
root.bind("<Button-3>", create_button)

# Erstes Label
label1 = tk.Label(root, text="Kurzbezeichnung einfügen:")
label1.pack()

# Eingabefeld
kurzbezeichnung = tk.Entry(root)
kurzbezeichnung.pack()

# Zweites Label unter dem Eingabefeld
label2 = tk.Label(root, text="Dazugehörigen Text eingeben:")
label2.pack()

# Textfeld
textfeld = tk.Text(master=root, width=39, height=4, wrap='word')
textfeld.pack()

# OK-Button
#ok_button = tk.Button(root, text="OK", command=ok_action)
#ok_button.pack(padx=20, pady=20)

# Speichern-Button
speichern_button = tk.Button(root, text="Speichern", command=save_action)
speichern_button.pack()

#Exit Button
exit_button = tk.Button(root, text="Exit", command=exit_action)
exit_button.pack(side="bottom", pady=10)
#Copy Button
copy_button = tk.Button(root, text="Kopieren", command=copy_text_to_clipboard)
copy_button.pack(pady=10)

root.mainloop()

Dateimenü erstellen:

def ok_action():
    print("OK-Button gedrückt")

def save_action():
    print ("Wird noch eingerichtet")


import tkinter as tk
from tkinter import Menu, filedialog, messagebox
root = tk.Tk()
# Datei-Menü anlegen
# Menüleiste erstellen
menubar = Menu(root)
root.config(menu=menubar)
datei_menu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Datei", menu=datei_menu)

datei_menu.add_command(label="Speichern unter...", command=save_action)
datei_menu.add_separator()
datei_menu.add_command(label="Beenden", command=exit)

# Erstes Label
label1 = tk.Label(root, text="Kurzbezeichnung einfügen:")
label1.pack()

# Eingabefeld
kurzbezeichnung = tk.Entry(root)
kurzbezeichnung.pack()

# Zweites Label unter dem Eingabefeld
label2 = tk.Label(root, text="Dazugehörigen Text eingeben:")
label2.pack()

# Textfeld
textfeld = tk.Text(master=root, width=39, height=4, wrap='word')
textfeld.pack()
#Button mit verknüpftem command:
ok_button = tk.Button(root, text="OK", command=ok_action)
ok_button.pack(padx=20, pady=20)

speichern_button=tk.Button(root, text="Speichern", command=save_action)
speichern_button.pack()

root.geometry("300x400")
root.mainloop()


Jetzt geht es vom Styling in die technische Entwicklung

Eingaben speichern lassen:

def ok_action():
    print("OK-Button gedrückt")


def exit():
    root.quit()

def save_action():
    kurz = kurzbezeichnung.get()  # Inhalt des Entry-Felds
    text = textfeld.get("1.0", "end-1c")  # Inhalt des Textfelds
    try:
        with open("eingaben.txt", "w", encoding="utf-8") as f:
            f.write("Kurzbezeichnung:\n")
            f.write(kurz + "\n\n")
            f.write("Text:\n")
            f.write(text)
        print("Eingaben wurden gespeichert.")
    except Exception as e:
        print(f"Fehler beim Speichern: {e}")

import tkinter as tk
from tkinter import Menu, filedialog, messagebox
root = tk.Tk()
# Datei-Menü anlegen
# Menüleiste erstellen
menubar = Menu(root)
root.config(menu=menubar)
datei_menu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Datei", menu=datei_menu)

datei_menu.add_command(label="Speichern unter...", command=save_action)
datei_menu.add_separator()
datei_menu.add_command(label="Beenden", command=exit)

# Erstes Label
label1 = tk.Label(root, text="Kurzbezeichnung einfügen:")
label1.pack()

# Eingabefeld
kurzbezeichnung = tk.Entry(root)
kurzbezeichnung.pack()

# Zweites Label unter dem Eingabefeld
label2 = tk.Label(root, text="Dazugehörigen Text eingeben:")
label2.pack()

# Textfeld
textfeld = tk.Text(master=root, width=39, height=4, wrap='word')
textfeld.pack()
#Button mit verknüpftem command:
ok_button = tk.Button(root, text="OK", command=ok_action)
ok_button.pack(padx=20, pady=20)

speichern_button=tk.Button(root, text="Speichern", command=save_action)
speichern_button.pack()

root.geometry("300x400")
root.mainloop()


Mit Rechtsklick einen neuen Button erstellen lassen:

def ok_action():
    print("OK-Button gedrückt")

def create_button(event):
    # Erzeuge neuen Button an der Position des Rechtsklicks
    btn = tk.Button(root, text="Neuer Button")
    btn.place(x=event.x, y=event.y)

def exit():
    root.quit()

def save_action():
    kurz = kurzbezeichnung.get()  # Inhalt des Entry-Felds
    text = textfeld.get("1.0", "end-1c")  # Inhalt des Textfelds
    try:
        with open("eingaben.txt", "w", encoding="utf-8") as f:
            f.write("Kurzbezeichnung:\n")
            f.write(kurz + "\n\n")
            f.write("Text:\n")
            f.write(text)
        print("Eingaben wurden gespeichert.")
    except Exception as e:
        print(f"Fehler beim Speichern: {e}")

import tkinter as tk
from tkinter import Menu, filedialog, messagebox
root = tk.Tk()
# Datei-Menü anlegen
# Menüleiste erstellen
menubar = Menu(root)
root.config(menu=menubar)
datei_menu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Datei", menu=datei_menu)

datei_menu.add_command(label="Speichern unter...", command=save_action)
datei_menu.add_separator()
datei_menu.add_command(label="Beenden", command=exit)
# Rechtsklick auf das Fenster erzeugt einen neuen Button
root.bind("<Button-3>", create_button)

# Erstes Label
label1 = tk.Label(root, text="Kurzbezeichnung einfügen:")
label1.pack()

# Eingabefeld
kurzbezeichnung = tk.Entry(root)
kurzbezeichnung.pack()

# Zweites Label unter dem Eingabefeld
label2 = tk.Label(root, text="Dazugehörigen Text eingeben:")
label2.pack()

# Textfeld
textfeld = tk.Text(master=root, width=39, height=4, wrap='word')
textfeld.pack()
#Button mit verknüpftem command:
ok_button = tk.Button(root, text="OK", command=ok_action)
ok_button.pack(padx=20, pady=20)

speichern_button=tk.Button(root, text="Speichern", command=save_action)
speichern_button.pack()

root.geometry("300x400")
root.mainloop()


Kurzbezeichung für den Button statt Neuer Button: