Ich stehe bei meinem Python Grundkursbuch grade in einer tkinker Aufgabe/Lernprojekt [Wiederwissens habe ich mich einfach mal daran versucht, obwohl ich dafür eigentlich noch zu wenig Verständnis habe .. Neugierde halt] mächtig an, ich bekomme den Index out of Range Fehler einfach nicht weg (Denkfehler?)
Kurze Beschreibung:
Auto Händler-Tool
4 Buttons:
Sortiment Listen (.txt anzeigen)
Fahrzeug verkaufen (aus .txt entfernen)
Fahrzeug hinzufügen (zu .txt hinzufügen)
Preis ändern (letzte Zeile in .txt ändern)
Sieht so aus:
Es arbeiten 3 Klassen bzw Module so wie es sein soll, nur das herauslöschen aus der Liste ('Verkaufen') nicht, da bekomme ich stets diesen Indexfehler,
wenn ich die richtige Artikelnummer eintippe UND er löscht mir die ganze Textdatei.
Gebe ich die falsche Nummer ein, komme ich (wie gewollt) in den 'else' Block und er zeigt mir die Fehler Meldung im Programm an.
Code: Alles auswählen
from tkinter import *
class Verkaufen(Button):
def verkaufen(self):
class MyButton(Button):
def aktion(self):
artnr = eingabe1.get()
f = open('dateien\sortiment.txt', 'r')
liste = f.readlines()
f.close()
geloescht = False
for i in range(len(liste)): # Schleife zum durchlaufen der Eingegeben ArtNr
if liste[i] == artnr + '\n':
f = open('dateien\sortiment.txt', 'w')
liste = liste[:i] + liste[i + 6:]
for linie in liste:
f.write(linie)
geloescht = True
break
f.close()
fenster.destroy()
if geloescht:
fenster2 = Tk()
fenster2.geometry("300x100")
fenster2.title('Auto erfolgreich verkauft!')
rahmen2 = Frame(fenster2, relief="ridge", borderwidth=5)
rahmen2.pack(fill="both", expand=1)
label2 = Label(rahmen2, text="Auto aus dem Sortiment entfernt!")
label2.pack(expand=1)
button2 = Button(rahmen2, text="OK", command=fenster2.destroy)
button2.pack(side="bottom", pady=5)
fenster2.mainloop()
else:
fenster2 = Tk()
fenster2.geometry("300x100")
fenster2.title("Warnung!")
rahmen2 = Frame(fenster2, relief="ridge", borderwidth=5)
rahmen2.pack(fill="both", expand=1)
label2 = Label(rahmen2, text="Artikelnummer nicht gefunden!")
label2.pack(expand=1)
button2 = Button(rahmen2, text="OK", command=fenster2.destroy)
button2.pack(side="bottom", pady=5)
fenster2.mainloop()
fenster = Tk() # Fenster erstellen
fenster.geometry("500x400") # Fenstergrösse
fenster.title("Fahrzeug löschen") # Fenstertitel
rahmen = Frame(fenster, relief="ridge", borderwidth=5) # Fensterrahmen
rahmen.pack(fill="both", expand=1) # Fensterrahmen ins Fenster packen
label = Label(rahmen, text="Welches Auto möchten Sie verkaufen?") # Label mit Titel
label.config(font=("Arial", 14, "bold")) # Labelschriftart/Stil
label.place(x=50, y=10) # Labelposition
label1 = Label(rahmen,
text="Artikelnummer:") # Label zum Eingeben der Artikelnr. zum späteren löschen erstellen
label1.place(x=100, y=100)
eingabe1 = Entry(rahmen, bd=2, width=22)
eingabe1.place(x=200, y=100)
button = MyButton(rahmen, text="Eingabe")
button["command"] = button.aktion
button.place(x=180, y=220)
fenster.mainloop()
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python38\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "C:\Users\chris\Desktop\python_work\verkaufen.py", line 14, in aktion
if liste[i] == artnr + '\n':
IndexError: list index out of range
Habt ihr ne Idee dazu und könnt mir so vom 'Profiblick' da drauf erklären wo es happert , oder braucht ihr dazu den ganzen Code mit den 4 Modulen?
Danke euch schonmal ganz nett!!
Lg Chris