Problem bei Vokabeltrainer

Fragen zu Tkinter.
Antworten
s1r0b
User
Beiträge: 13
Registriert: Freitag 30. Dezember 2005, 17:57

Hallo,
Ich mache gerade einen Vokabeltrainer, habe aber ein problem dabei.
So sieht derzeit der code aus:

Code: Alles auswählen

#!/usr/bin/python

import sys, re
from Tkinter import *
from time import *

global a
a = 0


def file_to_dict(name):
    f = file(name)
    c = f.read()
    f.close()
    global vokabel
    vokabel = dict([(x[1],x[2].strip('"').strip())
                     for x in re.findall('((\w+)\s*=[ \t\f\v]*(("[^"]*")|(\S*))[^\n]*\n)',c)])
                    
    return vokabel

def ende():
    sys.exit()
    
def get_input():
    global b,c
    global eingabe
    b,c = 0,1
    eingabe = entry.get()

    if eingabe == voks[a][c]:
            label2["text"] = "rischtisch"
            ergebnis = 1
            
            

    else:
            label2["text"] = "leider falsch"

    sleep(0.5)

    print eingabe
    print a,b,c
    a=+1

    label1["text"] = voks[a][b]
    
    

root = Tk()
label1 = Label(root, width=50, bg="white", fg="blue")
entry = Entry(root, width=50, bg="white", fg="black")
button1 = Button(root, text="OK", command = get_input)
button2 = Button(root, text="Exit", command = ende)
label2 = Label(root, width=50, bg="white", fg="blue")

label1.pack()
entry.pack()
label2.pack()
button1.pack()
button2.pack()



file_to_dict('vokabel.txt')

voks = vokabel.items()


label1["text"] = voks[0][0]  
Nun, beim Start des Programmes wird auch das Vokabel im ersten Label angezeit. Wenn man aber das gefragte Vokabel eintippt und den "OK" butto dr�ckt kommt es zu folgendem fehler:
line 30, in get_input
if eingabe == voks[a][c]:
UnboundLocalError: local variable 'a' referenced before assignment

Ich habe die variable 'a' schon gleich am Anfang global definiert, also sollte sie ja beim Aufruf bekannt sein.
Kann mir da jemand weiterhelfen?[/quote]
Flano
User
Beiträge: 43
Registriert: Sonntag 5. September 2004, 14:13

Eigentlich kann ich dir nicht wirklich helfen, da ich mit globalen Variablen unter Python nicht so richtig gearbeitet habe. Wenn möglich versuche ich globale Variablen zu vermeiden. Wenn du unter

Code: Alles auswählen

def get_input():
    global a 
eingibst müßte die Fehlermeldung verschwinden
-Peter-
User
Beiträge: 5
Registriert: Freitag 24. November 2006, 22:10

Hallo Ich bin noch ein anfänger und soll ein Vokabeltrainer auf graphischer Oberfläche machen mit TKinter ,

wäre nett wenn mir da einer unter die arme greift und zum fertigen Programm eine Erklärung dazuschreibt, sodass ich das nachvoll ziehen kann, denn ich habe überhaupt keine Vorstellung wie das funktioniert.

Vielen Dank im Voraus

-Peter-
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo -Peter-, willkommen im Forum.

Das Programm ist sehr simpel - wenn du etwas Python kannst, dann solltest du in der Lage sein, es zu verstehen. Daher schriebe doch bitte, was genau du an diesem programm nicht verstehst.

Allerdings ist dieses Programm wohl kaum als gutes Beispiel verwendbar - kaum sinnvolle Struktur, dafür viele glabale Variablen. Insgesammt würde ich dir raten, erstmal einen Vokabeltrainer ohne grafische Oberfläche zu schreiben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-Peter-
User
Beiträge: 5
Registriert: Freitag 24. November 2006, 22:10

Jo mein Problem ist, dass ich die Aufgabe zu Dienstag habe und wie ich das Label hinbekomme weiss ich auch , mich interessiert wie ich ein Dictionary verwenden kann um von dort die einzelen Vokabeln anzeigen zu lassen und er dann sagt ob es richtig oder falsch ist ...

mfg

-Peter-
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ungetestet:

Code: Alles auswählen

vocabs = {
    'auto' : 'car',
    'Katze' : 'cat'
}

for key, value in vocabs.iteritems():
    user = raw_input(key)
    if user == value:
        print 'Richtig'
    else:
        print 'Falsch'
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-Peter-
User
Beiträge: 5
Registriert: Freitag 24. November 2006, 22:10

Und wie geht das ganze noch auf graphischer Ebene ???

mfg

-Peter-
BlackJack

Was hast Du für Deine Hausaufgaben denn schon gemacht? Wenn konkrete Fragen auftauchen, dann beantworten wir die auch gerne.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

-Peter- hat geschrieben:Und wie geht das ganze noch auf graphischer Ebene ???
Welches Toolkit magst du denn verwenden? Tkinter?

Ansonsten würde ich dir raten, erstmal eine Library zu machen, die alle Funktionalität beinhaltet und die von der grafischen Darstellung aunabhängig ist. Erst über diese würde ich eine grafische Oberfläche legen (unabhängig davon welche). Das hat den Vorteil, dass die Programmlogik besser von der Programmdarstellung getrennt werden kann, was das Entwickeln und Debuggen wesentlich erleichtert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-Peter-
User
Beiträge: 5
Registriert: Freitag 24. November 2006, 22:10

Jo richtig ...

Die Oberfläche sprich das aussehen ist nicht alt zu schwer, nur die einbeziehung des Dictionarry mit den Antworten ...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Deswegen implementierst du auch eine libvocab, in der du funktionen wie get_next_question() implementierst.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten