tkinter.TclError: bad text index „0“

michi@sysvorOrt ~/programmierung/python/fertige-Programme $ python find-replace-gui.py
Exception in Tkinter callback
Traceback (most recent call last):
File „/usr/lib/python3.12/tkinter/init.py“, line 1968, in call
return self.func(*args)
^^^^^^^^^^^^^^^^
File „/home/michi/programmierung/python/fertige-Programme/find-replace-gui.py“, line 35, in eingaben_loeschen
eingabefeld.delete(0,tk.END)
File „/usr/lib/python3.12/tkinter/init.py“, line 3701, in delete
self.tk.call(self._w, ‚delete‘, index1, index2)
_tkinter.TclError: bad text index „0“

#!/usr/bin/env python3
from tkinter import *
import tkinter as tk 

root = Tk()
root.geometry("500x600")
root.title("Find and Replace")

def find_replace():
    eingabe = eingabefeld.get("1.0", tk.END)
    suchen = zu_suchen.get()
    ersetzen = zu_ersetzen.get()
    
    if suchen and ersetzen:
        abschluss = eingabe.replace(suchen, ersetzen)
        ausgabefeld.delete("1.0", tk.END)
        ausgabefeld.insert(tk.END, abschluss)
    else:
        ausgabefeld.delete("1.0", tk.END)
        ausgabefeld.insert(tk.END, "Bitte geben Sie sowohl den zu suchenden als auch den zu ersetzenden Text ein.")

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)

def eingaben_loeschen():
   eingabefeld.delete(0,tk.END)  

# GUI
# Erstellen Sie die Scrollbar vor den Text-Widgets
scrollbar = Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=Y)

eingabefeld = tk.Text(master=root, width=60, height=10, wrap='word', yscrollcommand=scrollbar.set)
eingabefeld.bind("<Button-3>", show_popup_menu)
eingabefeld.pack(pady=10)

zu_suchen = tk.Entry(master=root, width=40)
zu_suchen.pack(pady=5)
zu_suchen.insert(0, "Zu suchender Text")
zu_suchen.bind("<Button-3>", show_popup_menu)

zu_ersetzen = tk.Entry(master=root, width=40)
zu_ersetzen.pack(pady=5)
zu_ersetzen.insert(0, "Zu ersetzender Text")
zu_ersetzen.bind("<Button-3>", show_popup_menu)

ausgabefeld = tk.Text(master=root, width=60, height=10, yscrollcommand=scrollbar.set)
ausgabefeld.pack(pady=10)
ausgabefeld.bind("<Button-3>", show_popup_menu)

button = Button(text="Find - Replace ausführen", command=find_replace)
button.pack(pady=10)

button1 =Button(text="Eingaben löschen", command=eingaben_loeschen)
button1.pack()

# Konfigurieren Sie die Scrollbar, um beide Text-Widgets zu scrollen
scrollbar.config(command=lambda *args: (eingabefeld.yview(*args), ausgabefeld.yview(*args)))

root.mainloop()

Der Fehler, den Sie erhalten, deutet darauf hin, dass Sie versuchen, die delete()-Methode auf ein Text-Widget anzuwenden, anstatt auf ein Entry-Widget. Text-Widgets verwenden ein anderes Indexierungssystem als Entry-Widgets. Hier sind einige mögliche Lösungen:

  1. Wenn Sie ein Text-Widget verwenden:
    Ändern Sie Ihre eingaben_loeschen() Funktion wie folgt:
  1. pythondef eingaben_loeschen(): eingabefeld.delete("1.0", tk.END) Bei Text-Widgets beginnt der Index mit „1.0“, wobei „1“ die erste Zeile und „0“ die erste Spalte bezeichnet.
  2. Wenn Sie ein Entry-Widget verwenden sollten:
    Überprüfen Sie, ob Sie tatsächlich ein Entry-Widget erstellt haben und nicht versehentlich ein Text-Widget.
  3. Wenn Sie mehrere Eingabefelder haben:
    Stellen Sie sicher, dass Sie die richtige Widget-Variable ansprechen.

Um den Fehler genauer zu diagnostizieren, wäre es hilfreich, den relevanten Teil Ihres Codes zu sehen, insbesondere wie Sie das eingabefeld Widget erstellen und wie Sie die eingaben_loeschen() Funktion definieren und aufrufen.

Schreibe einen Kommentar