from tkinter import * # Trial - Dynamic Label Updates # Purpose: Learn how a single label can act as both an error display # AND a result display, by changing its text, colour and font. # This is how the answer_error label works in the Distance Converter. class LabelTrial: def __init__(self): self.frame = Frame(padx=20, pady=20) self.frame.grid() Label(self.frame, text="Dynamic Label Trial", font=("Arial", "16", "bold")).grid(row=0) Label(self.frame, text="One label handles errors AND results - watch it change.", font=("Arial", "11"), fg="#666666", wraplength=300).grid(row=1, pady=5) self.entry = Entry(self.frame, font=("Arial", "14"), width=20) self.entry.grid(row=2, pady=10) # This is the shared answer/error label # Starts red (error state) self.answer_error = Label(self.frame, text="Please enter a number", font=("Arial", "13", "bold"), fg="#9C0000") self.answer_error.grid(row=3, pady=5) # Buttons that trigger different states btn_frame = Frame(self.frame) btn_frame.grid(row=4, pady=10) Button(btn_frame, text="Simulate Result", font=("Arial", "11", "bold"), bg="#004C99", fg="#FFFFFF", width=14, command=self.show_result).grid(row=0, column=0, padx=5) Button(btn_frame, text="Simulate Error", font=("Arial", "11", "bold"), bg="#9C0000", fg="#FFFFFF", width=14, command=self.show_error).grid(row=0, column=1, padx=5) Button(btn_frame, text="Simulate Success", font=("Arial", "11", "bold"), bg="#009900", fg="#FFFFFF", width=14, command=self.show_success).grid(row=1, column=0, padx=5, pady=5) Button(btn_frame, text="Reset", font=("Arial", "11", "bold"), bg="#666666", fg="#FFFFFF", width=14, command=self.reset).grid(row=1, column=1, padx=5, pady=5) def show_result(self): """Mimic a conversion result - blue, normal size""" text = self.entry.get() or "1.5" self.answer_error.config( text=f"{text} km = {float(text) * 1000 if text.replace('.','').isdigit() else '?'} m", fg="#004C99", font=("Arial", "13", "bold") ) self.entry.config(bg="#FFFFFF") def show_error(self): """Mimic a validation error - red, entry goes pink""" self.answer_error.config( text="Please enter a valid positive number", fg="#9C0000", font=("Arial", "13", "bold") ) self.entry.config(bg="#F4CCCC") self.entry.delete(0, END) def show_success(self): """Mimic an export success - green, larger font""" self.answer_error.config( text="Export successful! File saved.", fg="#009900", font=("Arial", "13", "bold") ) self.entry.config(bg="#FFFFFF") def reset(self): """Return to the initial error state""" self.answer_error.config( text="Please enter a number", fg="#9C0000", font=("Arial", "13", "bold") ) self.entry.config(bg="#FFFFFF") self.entry.delete(0, END) # main routine if __name__ == "__main__": root = Tk() root.title("Dynamic Label Trial") LabelTrial() root.mainloop()