2017-07-24 4 views
0

Ich bin völlig neu in Python und versuche, ein Programm zu erstellen (mit tkinter), das Einheiten konvertiert. Ich denke, ich habe ein Problem in der 5. Zeile. Kann jemand meine Codes prüfen und mir einen Vorschlag machen, um es zu reparieren? DankeWie kann ich einen Wert aus OptionMenu (tkinter) zuweisen, um ihn später zu verwenden?

choices = {'feet': 0.3048, 'inches': 0.0254} 
choice = StringVar() 
popupChoice = OptionMenu(secondFrame, choice, *choices) 
popupChoice.pack() 
pick_choice = choices[choice.get()] 

def calculate(*args): 
    try: 
     value = float(feet.get()) 
     meter.set(value*float(pick_choice)) 
    except ValueError: 
     print("error") 

Antwort

1

StringVar() als Standard Sie leeren String ‚‘ bietet, so kann nichts in Ihrem Wörterbuch zu erreichen und KeyError angehoben. Einfach Wenn es geht.

# choices.keys() will provide list of your keys in dictionary 
if choice.get() in choices.keys(): 
    pick_choice = choices[choice.get()] 

Oder Sie können Standardwert, bevor es zum Beispiel ein:

choice = StringVar() 
choice.set("feet") 

Beispiel, wie es aussehen kann:

from tkinter import * 

def calculate(): 
    try: 
     value = float(feet.get()) 
     label.config(text=str(value*float(choices[choice.get()]))) 
    except ValueError or KeyError: 
     label.config(text='wrong/missing input') 
# config can change text and other in widgets 

secondFrame = Tk() 
# entry for value 
feet = StringVar() 
e = Entry(secondFrame, textvariable=feet) 
e.grid(row=0, column=0, padx=5) # grid is more useful for more customization 
# label showing result or other text 
label = Label(secondFrame, text=0) 
label.grid(row=0, column=2) 
# option menu 
choices = {'feet': 0.3048, 'inches': 0.0254} 
choice = StringVar() 
choice.set("feet") # default value, to use value: choice.get() 
popupChoice = OptionMenu(secondFrame, choice, *choices) 
popupChoice.grid(row=0, column=1, padx=5) 
# button to launch conversion, calculate is not called with variables 
# call them in function, or use lambda function - command=lambda: calculate(...) 
button1 = Button(secondFrame, command=calculate, text='convert') 
button1.grid(row=1, column=1) 
secondFrame.mainloop() 
+0

wenn mein Code mit diesem Code unten fortsetzen, wird es show "pick_choice" ist nicht definiert: def berechnen (* args): versuchen: va lue = Schwimmer (feet.get()) meter.set (Wert * Schwimmer (pick_choice)) außer Valueerror: print ("Fehler") –

+0

Es ist, weil tkinter in Schleife ausgeführt wird und Sie nicht anrufen möchten Ihre Werte sofort, da sie nicht definiert werden müssen, wenn Sie Benutzereingaben verwenden. Besser ist es, es zu definieren, wenn Sie es brauchen, also in der Berechnungsfunktion. Siehe Beispiel und ich hoffe, das wird alle Probleme lösen. – Foxpace

Verwandte Themen