Eren
Eren

Reputation: 25

[Python]Updating the GUI depending on the dropdown menu option

I am creating a simple temperature converter in python using tkinter. I have created a drop down menu with the options and a convert button. What I want to do is when the dropdown menu's changes I want the button to do a different thing. How can I achieve this ?

(example in this case: if celcius to fahrenheit is chosen button should convert cel to fahrenheit if fahr to celsius is chosen it should convert that way. )

Here is the code:

from tkinter import *

def converter():
    # Create functions for conversion
    def cel_fahr():
        res = int(entry.get()) * 9/5 +32
        print (res)
    def fahr_cel():
        res = (int(entry.get()) - 32) * 5/9
        print (res)

    #Options list for the dropdown
    list_opt = ['Celsius to Fahrenheit', 'Fahrenheit to Celsius']
    # Create the main window 
    root = Tk()
    # Rename the title of the window    
    root.title("Temperature Converter")
    # Set the size of the window
    root.geometry("250x250")
    # Set resizable FALSE
    root.resizable(0,0)
    # Create a variable for the default dropdown option 
    var1 = StringVar()
    # Set the default drop down option 
    var1.set(list_opt[0])
    # Create the dropdown menu 
    dropdown = OptionMenu(root, var1, *list_opt)
    dropdown.configure(state="active")
    # Place the dropdown menu
    dropdown.place(x=45, y=10)

    # Create an entry 
    entry = Entry(root)
    entry.place (x=47, y=60)

    #Create a button 
    button = Button(root, text='Convert', command=cel_fahr)
    button.place(x=85,y=90)

    #I TRIED THIS BUT NO            
    #if var1 == list_opt[0]:
    #button = Button(root, text='Convert', command=cel_fahr)
    #button.place(x=85,y=90)
    #if var1 == list_opt[1]:
    #button = Button(root, text='Convert', command=fahr_cel)
    #button.place(x=85,y=90)


root.mainloop()



converter()

Upvotes: 1

Views: 2205

Answers (1)

Constantly Confused
Constantly Confused

Reputation: 635

Switched up your code a little bit:

from tkinter import *

def converter():
    # Create functions for conversion
    def cel_fahr():
        res = int(entry.get()) * 9/5 +32
        print (res)
    def fahr_cel():
        res = (int(entry.get()) - 32) * 5/9
        print (res)

    def convert():
        if selected.get() == 'Celsius to Fahrenheit':
            cel_fahr()
        else:
            fahr_cel()

    #Options list for the dropdown
    list_opt = ['Celsius to Fahrenheit', 'Fahrenheit to Celsius']
    # Create the main window 
    root = Tk()
    # Rename the title of the window    
    root.title("Temperature Converter")
    # Set the size of the window
    root.geometry("250x250")
    # Set resizable FALSE
    root.resizable(0,0)
    # Create a variable for the default dropdown option 
    selected = StringVar(root)
    # Set the default drop down option 
    selected.set('Celsius to Fahrenheit')
    # Create the dropdown menu 
    dropdown = OptionMenu(root, selected, 'Celsius to Fahrenheit', 'Fahrenheit to Celsius')
    # Place the dropdown menu
    dropdown.place(x=45, y=10)

    # Create an entry 
    entry = Entry(root)
    entry.place (x=47, y=60)

    #Create a button 
    button = Button(root, text='Convert', command=convert)
    button.place(x=85,y=90)

    root.mainloop()



converter()

Instead of the options being in a list, I've just dropped them into the menu when it's created. When the button is pressed, it then calls a function which decides which conversion to use, based on the value selected in the dropdown menu.

I've also changed the variable name for var1 (to "selected"), because it's not very descriptive, and got a bit confusing to code with.

Upvotes: 2

Related Questions