lerne gerade Python zu programmieren und komme nicht weiter.
Versuche gerade einen Vokabeltrainer nach zu programmieren und verstehe den Fehler nicht da in dem Tutorial der gleiche Befehl "1xAlle" ist und funktioniert.
Kann mir da jemand weiterhelfen. Suche mir den Wolf aber versteh nicht woran es liegt.
Code: Alles auswählen
# Externe Module
import os, sqlite3, tkinter, random
# Falls keine Datenbankdatei vorhanden: Erstellen, mit Startdaten
if not os.path.exists("vokabel.db"):
con = sqlite3.connect("vokabel.db")
cursor = con.cursor()
sql = "CREATE TABLE daten(id INTEGER PRIMARY KEY, deu TEXT, eng TEXT, fra TEXT)"
cursor.execute(sql)
startdaten = [["suchen", "to look for", "chercher"],
["abkürzen", "to abbreviate", "raccourcir"],
["nützlich", "useful", "utile"],
["beraten", "to advise", "conseiller"],
["einfach", "easy", "simple"],
["ankündigen", "to announce", "annoncer"]]
for gruppe in startdaten:
sql = "INSERT INTO daten(deu, eng, fra) VALUES('" + gruppe[0] \
+ "', '" + gruppe[1] + "', '" + gruppe[2] + "')"
print(sql)
cursor.execute(sql)
con.commit()
con.close()
# Vokabel speichern
def vokabelSpeichern():
if enDeu.get() == "" or enEng.get() == "" or enFra.get() == "":
tkinter.messagebox.showwarning("Warnung", "Alle drei Eingabefelder füllen")
return
# Prüfen, ob Vokabel bereits vorhanden ist
con = sqlite3.connect("vokabel.db")
cursor = con.cursor()
sql = "SELECT * FROM daten WHERE deu = '" + enDeu.get() + "'"
cursor.execute(sql)
ergebnis = cursor.fetchall()
# Falls Vokabel bereits vorhanden ist, ggf. überschreiben
if ergebnis:
antwort = tkinter.messagebox.askyesno("Vokabel bereits vorhanden",
"Wollen Sie Folgendes ersetzen?\n" + ergebnis[0][1] +
"; " + ergebnis[0][2] + "; " + ergebnis[0][3])
if antwort == 1:
sql = "UPDATE daten SET eng = '" + enEng.get() + "', fra = '" + \
enFra.get() + "' WHERE deu = '" + enDeu.get() + "'"
print(sql)
cursor.execute(sql)
con.commit()
else:
sql = "INSERT INTO daten (deu, eng, fra) VALUES('" + enDeu.get() \
+ "', '" + enEng.get() + "', '" + enFra.get() + "')"
print(sql)
cursor.execute(sql)
con.commit()
con.close()
# Vokabel löschen
def vokabelLoeschen():
if enDeu.get() == "" or enEng.get() == "" or enFra.get() == "":
tkinter.messagebox.showwarning("Warnung", "Alle drei Eingabefelder füllen")
return
# Löschen, falls alle drei Einträge übereinstimmen
con = sqlite3.connect("vokabel.db")
cursor = con.cursor()
sql = "DELETE FROM daten WHERE deu = '" + enDeu.get() + "' AND eng = '" + \
enEng.get() + "' AND fra = '" + enFra.get() + "'"
print(sql)
cursor.execute(sql)
con.commit()
con.close()
# Test starten, Frage stellen, Eingabe prüfen
testAktiv = False
def startenStellenPruefen():
global testAktiv, listeEins, listeZwei, nummerAuswahl
# Falls Test noch nicht gestartet wurde
if not testAktiv:
# Wurde eine Auswahl getroffen?
if liKombi.curselection():
kombi = int(liKombi.curselection()[0])
else:
tkinter.messagebox.showwarning("Warnung", "Treffen Sie zunächst eine Auswahl")
return
# Test starten
buTestStarten["text"] = "Prüfen / Nächste Vokabel"
testAktiv = True
nummerAuswahl = -1
# Datensätze laden
con = sqlite3.connect("vokabel.db")
cursor = con.cursor()
sql = "SELECT * FROm daten"
cursor.execute(sql)
# Listen füllen
listeEins = []
listeZwei = []
for dsatz in cursor:
if kombi == 0:
listeEins.append(dsatz[1])
listeZwei.append(dsatz[2])
elif kombi == 1:
listeEins.append(dsatz[2])
listeZwei.append(dsatz[1])
elif kombi == 2:
listeEins.append(dsatz[1])
listeZwei.append(dsatz[3])
elif kombi == 3:
listeEins.append(dsatz[3])
listeZwei.append(dsatz[1])
elif kombi == 4:
listeEins.append(dsatz[2])
listeZwei.append(dsatz[3])
else:
listeEins.append(dsatz[3])
listeZwei.append(dsatz[2])
con.close()
# Antwort prüfen, falls nicht allererste Frage
if nummerAuswahl != -1:
if enAntwort.get() == listeZwei[nummerAuswahl]:
lbBew["text"] = "Richtig: " + listeEins[nummerAuswahl] + " = " + listeZwei[nummerAuswahl]
del listeEins[nummerAuswahl]
del listeZwei[nummerAuswahl]
else:
lbBew["text"] = "Falsch: " + listeEins[nummerAuswahl] + " = " + listeZwei[nummerAuswahl]
# Test ist zu Ende?
if not listeEins:
tkinter.messagebox.showinfo("Info", "Alles gelöst, gratuliere")
# Startzustand herstellen
buTestStarten["text"] = "Test starten"
lbFrage["text"] = "(Frage)"
enAntwort.delete(0, "end")
lbBew["text"] = "(Bewertung)"
testAktiv = False
nummerAuswahl = -1
return
# Nächste Frage stellen
nummerAuswahl = random.randint(0, len(listeEins) - 1)
lbFrage["text"] = listeEins[nummerAuswahl] + " ="
enAntwort.delete(0, "end")
# Alle Vokabeln anzeigen
def alleAnzeigen():
con = sqlite3.connect("vokabel.db")
cursor = con.cursor()
sql = "SELECT * FROM daten order by deu"
cursor.execute(sql)
lxAlle.delete(0, "end")
for dsatz in cursor:
lxAlle.insert("end", dsatz[1] + "; " + dsatz[2] + "; " + dsatz[3])
con.close()
# Anzeige löschen
def anzeigeLoeschen():
lxAlle.delete(0, "end")
# Auf Auswahl eines Eintrags reagieren
def lxAlleClick(e):
nr = int(lxAlle.curselection()[0])
inhalt = lxAlle.get(nr)
teile = inhalt.split(";")
enDeu.delete(0, "end")
enEng.delete(0, "end")
enFra.delete(0, "end")
enDeu.insert("end", teile[0])
enEng.insert("end", teile[1][1:])
enFra.insert("end", teile[2][1:])
# Programm beenden
def ende():
main.destroy()
# Hauptfenster
main = tkinter.Tk()
main["height"] = 480
main["width"] = 600
# Drei Label zum Ändern der Vokabeln
lbDeu = tkinter.Label(main, text="deutsch:")
lbDeu.place(x=10, y=10)
lbEng = tkinter.Label(main, text="englisch:")
lbEng.place(x=140, y=10)
lbFra = tkinter.Label(main, text="französisch:")
lbFra.place(x=270, y=10)
# Drei Entries zum Ändern der Vokabeln
enDeu = tkinter.Entry(main, width=13)
enDeu.place(x=10, y=40)
enEng = tkinter.Entry(main, width=13)
enEng.place(x=140, y=40)
enFra = tkinter.Entry(main, width=13)
enFra.place(x=270, y=40)
# Zwei Buttons zum Speichern bzw. Löschen einer Vokabel
buSpeichern = tkinter.Button(main, text="Speichern", command=vokabelSpeichern)
buSpeichern.place(x=410, y=30)
buLoeschen = tkinter.Button(main, text="Löschen", command=vokabelLoeschen)
buLoeschen.place(x=510, y=30)
# Label und Listbox zur Auswahl der Sprachkombination
lbKombi = tkinter.Label(main, text="Sprachkombination für Test:")
lbKombi.place(x=10, y=80)
liKombi = tkinter.Listbox(main, width=25, height=0)
liKombi.insert("end", "deutsch / englisch")
liKombi.insert("end", "englisch / deutsch")
liKombi.insert("end", "deutsch / französisch")
liKombi.insert("end", "französisch / deutsch")
liKombi.insert("end", "englisch / französisch")
liKombi.insert("end", "französisch / englisch")
liKombi.place(x=10, y=110)
# Button zum Starten des Tests
buTestStarten = tkinter.Button(main, text="Test starten", command=startenStellenPruefen)
buTestStarten.place(x=250, y=110)
# Zwei Label und ein Entry für den Test
lbFrage = tkinter.Label(main, text="(Frage)")
lbFrage.place(x=250, y=165)
enAntwort = tkinter.Entry(main, width=13)
enAntwort.place(x=410, y=165)
lbBew = tkinter.Label(main, text="(Bewertung)")
lbBew.place(x=250, y=210)
# Liste mit Scrollbalken, um alle Vokabeln anzuzeigen
lbListe = tkinter.Label(main, text="Alle Vokabeln:")
lbListe.place(x=10, y=260)
frListe = tkinter.Frame(main)
frListe.place(x=10, y=290)
scbAlle = tkinter.Scrollbar(frListe, orient="vertical")
lxAlle = tkinter.Listbox(frListe, width=40, height=7, yscrollcommand=scbAlle.set)
scbAlle["command"] = lxAlle.yview
lxAlle.pack(side="left")
scbAlle.pack(side="left", fill="y")
lxAlle.bind("<<ListboxSelect>>", lxAlleClick)
# Zwei Buttons zum Anzeigen aller Vokabeln und zum Löschen der Anzeige
buAlleAnzeigen = tkinter.Button(main, text="Alle Vokabeln anzeigen", command=alleAnzeigen)
buAlleAnzeigen.place(x=380, y=290)
buAnzeigeLoeschen = tkinter.Button(main, text="Anzeige löschen", command=anzeigeLoeschen)
buAnzeigeLoeschen.place(x=380, y=340)
# Ende
buEnde = tkinter.Button(main, text="Ende", command=ende)
buEnde.place(x=530, y=400)
# Hauptprogrammschleife starten
main.mainloop()