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()
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") –
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