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:
- Wenn Sie ein Text-Widget verwenden:
Ändern Sie Ihreeingaben_loeschen()
Funktion wie folgt:
- python
def 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. - 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. - 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.