from tkinter import * from tkinter import ttk root = Tk() root.title("Distance conversion") factors = { #all values are m / x "m" : 1, "cm" : 0.01, "mm" : 0.001, "km" : 1000, "au" : 1.496e11, "ly" : 9.461e15, "pc" : 3.086e16, "ft" : 0.3048, "yd" : 0.9144, "in" : 0.0254 } def calculate(*args): try: value = float(entry.get()) destUnit = 1/factors[destUnitString.get()] srcUnit = factors[srcUnitString.get()] factor = srcUnit*destUnit out.set(round(value*factor, 4)) except ValueError: pass bg = PhotoImage(file="M:\Pictures\hk stream\hornet siitt.png") im = ttk.Label(root, image=bg) im.grid(column=0,row=1) mainframe = ttk.Frame(root, padding=(5,15,5,15)) mainframe.grid(column=0, row=0, sticky=(N,W,E,S)) entry = StringVar() entryBox = ttk.Entry(mainframe, width=8, textvariable=entry) entryBox.grid(column=2,row=1, sticky=(W,E)) out = StringVar() ttk.Label(mainframe, textvariable=out).grid(column=2, row=2, sticky=(W,E)) calcButton = ttk.Button(mainframe, text="Convert", command=calculate) calcButton.grid(column=3, row=3, sticky=W) srcUnitString = StringVar() srcUnitString.set("ft") srcUnitEntry = ttk.Combobox(mainframe, textvariable=(srcUnitString), values=list(factors.keys()), state="readonly") srcUnitEntry.grid(column=3, row=1, sticky=W) ttk.Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E) destUnitString = StringVar() destUnitString.set("m") destUnitEntry = ttk.Combobox(mainframe, textvariable=destUnitString, values=list(factors.keys()), state="readonly") destUnitEntry.grid(column=3, row=2, sticky=W) root.columnconfigure(0, weight=1) root.rowconfigure(0, weight=1) mainframe.columnconfigure(2, weight=1) for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5) entryBox.focus() root.bind("", lambda e: calcButton.invoke()) root.mainloop()