Home > Enterprise >  How to make same button do different actions depending on dropdown menu result with tkinter?
How to make same button do different actions depending on dropdown menu result with tkinter?

Time:05-18

is there a way to make the same button do different actions depending on what the user chooses from drop down menu?

I tried this for example, but it doesn't work:

from tkinter import *
from tkinter import ttk

root = Tk()
root.geometry("400x200")

def say_hello():
    hello_label = Label(root, text= "Hello")
    hello_label.grid(row=1, column=0, padx=10, pady=10)

def say_goodbye():
    bye_label = Label(root, text= "Goodbye")
    bye_label.grid(row=1, column=0, padx=10, pady=10)

do = ""
drop_table = ttk.Combobox(root, values=["Choose Action..", "Say Hello","Say Goodbye"])
drop_table.current(0)
drop_table.grid(row=0, column=0, padx=10, pady=10)

selected = drop_table.get()

if selected == "Say Hello":
    do = say_hello
if selected == "Say Goodbye":
    do = say_goodbye

button = Button(root, text= "Choose", command = do)
button.grid(row=0, column=2, padx=10, pady=10)

root.mainloop()

CodePudding user response:

You would need to link your button to a function and include your if statements in the function. Then use your function as the command for your button like this.

from tkinter import *
from tkinter import ttk

root = Tk()
root.geometry("400x200")

def say_hello():
    hello_label = Label(root, text= "Hello")
    hello_label.grid(row=1, column=0, padx=10, pady=10)

def say_goodbye():
    bye_label = Label(root, text= "Goodbye")
    bye_label.grid(row=1, column=0, padx=10, pady=10)

do = ""
drop_table = ttk.Combobox(root, values=["Choose Action..", "Say Hello","Say Goodbye"])
drop_table.current(0)
drop_table.grid(row=0, column=0, padx=10, pady=10)


def action():
    selected = drop_table.get()
    if selected == "Say Hello":
        say_hello()
    if selected == "Say Goodbye":
        say_goodbye()
        

button = Button(root, text= "Choose", command= action)
button.grid(row=0, column=2, padx=10, pady=10)

root.mainloop()
  • Related