Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tkinter: How to call a function using the OptionMenu widget?

I'm working on a simple Python-Tkinter application. Here's a simplification of the code I'm having now.

from Tkinter import *
root = Tk()

def function(x): 

    if x == "yes":
        a.set("hello")
    else:
        a.set("bye")

#-----------------------------

a = StringVar()
a.set("default")

oc = StringVar(root)
oc.set("Select")
o = OptionMenu(root, oc, "yes", "no", command=function)
o.pack()

z = a.get() 
print z # prints default

root.mainloop()

I want this code to print "hello" or "bye" to the console but instead it prints "default".

I have been trying to make this work but somehow I can't figure it out. The code works fine if I call the function directly instead of using an Optionmenu widget:

z = function("yes")
print z #prints hello

or:

z = function("no") 
print z #prints bye

Could someone explain why it doesn't print "hello" or "bye" when I use the Optionmenu widget. And how do I fix it so I can use the variable z without changing the part above the line?

Thanks!

like image 956
Roundhouse Avatar asked Apr 18 '26 03:04

Roundhouse


1 Answers

from Tkinter import *
root = Tk()

a = StringVar()
a.set("default")

oc = StringVar(root)
oc.set("Select")

def function(x):

  if x == "yes":
      a.set("hello")
      print a.get()

  else:
      a.set("bye")
      print a.get()

o = OptionMenu(root, oc, "yes", "no", command=function)
o.pack()


z = a.get()    
print z

root.mainloop()

OptionMenu executes function now when the OptionMenu selection is changed -- if the option menu reads "yes", function executes with "yes" as its parameter and sets a to "hello" and sets a to "bye" for all other options.

like image 138
JoshieSimmons Avatar answered Apr 21 '26 01:04

JoshieSimmons



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!