2016-06-30 14 views
1

Ich habe eine einfache GUI in Tkinter gemacht. (Code ist unten) Wenn ich die "Fetch" -Taste drücke, bekomme ich die Texteingabe von der GUI in einer Befehlszeile.Tkinter Variablen

Nehmen wir an, dass in diesem Beispiel der "Benutzer" 0,5 in das Feld "Service Points Won" und 0,7 in das Feld "Return Points Won" als Eingabe setzt. Wenn ich die „Fetch“ Botton drücke ich die folgenden Ergebnisse in Eingabeaufforderung angezeigt bekommen

0.5 
0.7 

Was würde Ich mag es, zu erreichen, dass neben dem angezeigten Ergebnis in Eingabeaufforderung die passende „Label“ wird ebenfalls angezeigt.

Also, um zu meinem Beispiel mit 0,5 und 0,7 als Eingabe zurückzukehren. Ich möchte ein Ergebnis in der Eingabeaufforderung wie folgt erhalten.

"Service Points Won" 0.5 
"Return Points Won" 0.7 

GUI Script

from Tkinter import * 

fields = 'Service Points Won', 'Return Points Won' 

def fetch(variables): 
    for variable in variables: 
     print "%s" % variable.get()  

def makeform(root, fields): 
    lab1= Label(text="Stats", font="Verdana 10 bold") 
    form = Frame(root)        
    left = Frame(form) 
    rite = Frame(form) 
    lab1.pack(side=TOP) 
    form.pack(fill=X) 
    left.pack(side=LEFT) 
    rite.pack(side=RIGHT) 

    variables = [] 
    for field in fields: 
     lab1= Label() 
     lab = Label(left, text=field) 
     ent = Entry(rite) 
     lab.pack(anchor='w') 
     ent.pack(fill=X) 
     var = StringVar() 
     ent.config(textvariable=var) 
     var.set('0.5') 
     variables.append(var) 
    return variables 

if __name__ == '__main__': 
    root = Tk() 
    vars = makeform(root, fields) 
    Button(root, text='Fetch', 
       command=(lambda v=vars: fetch(v))).pack() 
    root.bind('<Return>', (lambda event, v=vars: fetch(v))) 
    root.mainloop() 

Irgendwelche Vorschläge?

+1

'Variable' hat wahrscheinlich mehr Methoden und Attribute als nur' .get() '. Vielleicht gibt Ihnen eine der anderen Methoden oder Attribute den Namen des Feldes? Oder vielleicht sogar 'str (variabel)' den Trick? – Evert

+0

@Evert, str (variable) macht den Trick nicht. Welche anderen Methoden oder Attribute könnte ich verwenden? – Wouter

+1

'print (dir (variable))' wird wahrscheinlich viele Optionen offenbaren. Sie könnten damit beginnen, die logischsten zu versuchen. Die Dokumentation kann auch helfen. – Evert

Antwort

1

Da Sie einige Felder anderen zuordnen möchten, ist die Verwendung eines Wörterbuchs eine bessere Wahl als die Verwendung einer Liste.

def fetch(variables): 
    for key, val in variables.items(): 
     print key, val.get() 

def makeform(root, fields): 
    ... 
    variables = {} 
    for field in fields: 
     ... 
     variables[field] = var #associate a field with its variable 
    return variables 

Welche

Service Points Won 0.5 
Return Points Won 0.7 

Hinweis auszudrucken, die Sie Ihre Druckformat können, wie Sie in Ihrer fetch Funktion wünschen.