from tkinter import * # Trial 2 - Two OptionMenu dropdowns built from a list # Purpose: Learn how to use a list of options and build TWO linked dropdowns # This is how the distance converter handles from/to unit selection # Unit options stored in a list (mirrors all_constants.UNITS) UNITS = ["km", "m", "cm", "mm"] class DropdownTrial: def __init__(self): self.frame = Frame(padx=10, pady=10) self.frame.grid() self.heading = Label(self.frame, text="Dropdown Trial - v2 (Two Dropdowns)", font=("Arial", "16", "bold")) self.heading.grid(row=0) # --- From unit row --- self.from_frame = Frame(self.frame) self.from_frame.grid(row=1, pady=5) Label(self.from_frame, text="Convert from:", font=("Arial", "12")).grid(row=0, column=0, padx=(0, 10)) self.from_var = StringVar(value=UNITS[0]) # default: km # Unpack the list using * so each item becomes a separate argument self.from_menu = OptionMenu(self.from_frame, self.from_var, *UNITS) self.from_menu.config(font=("Arial", "12"), width=5) self.from_menu.grid(row=0, column=1) # --- To unit row --- self.to_frame = Frame(self.frame) self.to_frame.grid(row=2, pady=5) Label(self.to_frame, text="Convert to: ", font=("Arial", "12")).grid(row=0, column=0, padx=(0, 10)) self.to_var = StringVar(value=UNITS[1]) # default: m self.to_menu = OptionMenu(self.to_frame, self.to_var, *UNITS) self.to_menu.config(font=("Arial", "12"), width=5) self.to_menu.grid(row=0, column=1) # --- Check button --- self.check_button = Button(self.frame, text="Show Selection", font=("Arial", "12", "bold"), bg="#009900", fg="#FFFFFF", width=14, command=self.show_selected) self.check_button.grid(row=3, pady=10) self.result_label = Label(self.frame, text="", font=("Arial", "12")) self.result_label.grid(row=4) def show_selected(self): from_unit = self.from_var.get() to_unit = self.to_var.get() # Check for same-unit selection - important validation! if from_unit == to_unit: self.result_label.config( text="Error: please choose two different units", fg="#9C0000" ) else: self.result_label.config( text=f"Converting from {from_unit} to {to_unit}", fg="#004C99" ) # main routine if __name__ == "__main__": root = Tk() root.title("Dropdown Trial v2") DropdownTrial() root.mainloop()