Python Forum

Full Version: tkinter, dropdowns with changing options
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Helloooooo,

Very new to python. Finding it quite difficult actually.
Learned the fundamentals well enough, but theres never really much instruction on how to fit it all together into something meaningful. Any advice on learning material there owuld be good, but not my problem.

I am currently trying to code a small self-contained application as a project.

the purpose of the application is to help me later and newbies to write puppet manifest files.

So I will have a dropdown box for the type of resource (package, file) and then more drop down boxes to include resource specific attributes.

Would anyone know how to change the options of one dropdown menu, based on the option selected in another or parent one?

Much appreciated.
show code
from Tkinter import *
import Tkinter as ttk
from ttk import *
 
root = Tk()
root.title("puppet app")
 
# Add a grid
mainframe = Frame(root)
mainframe.grid(column=0,row=0, sticky=(N,W,E,S) )
mainframe.columnconfigure(0, weight = 1)
mainframe.rowconfigure(0, weight = 1)
mainframe.pack(pady = 100, padx = 100)
 
tkvar = StringVar(root)
 
choices = { 'Package','file'}
tkvar.set('Package') # set the default option
 
popupMenu = OptionMenu(mainframe, tkvar, *choices)
Label(mainframe, text="Choose an option").grid(row = 1, column = 1)
popupMenu.grid(row = 2, column =1)
 

def change_dropdown(*args):
    print( tkvar.get() )
 

tkvar.trace('w', change_dropdown)
 
root.mainloop()
So, when someone selects "package", i need another drop down box to appear or another box to have its options change to the package specific attributes.

This is a puppet manifest in its normal form:
package { 'apache2':
  require => Exec['apt-update'],        # require 'apt-update' before installing
  ensure => installed,
}
So the "require" attribute for package, isnt necessary for the 'file' option.

So at the minute, its almost nothing. just a small GUI box, with one drop down.
I'm thinking the options may change using an IF statement? but i'm not sure how to do it.

Any help appreciated.
This is a guess as I haven't used tkinter in a while, try changing line 29 to:
tkvar.trace('w', lambda: change_dropdown)
I know that this is quite old but I am facing a similar issue. Does anyone know the answer? I am trying to create dependent dropdowns, for example something like this:

the drop_down is the main one and the other should change in relation on which choice you make on the main one.

drop_down =['one',
            'two']

dep_drop=['one_1',
          'one_2',
          'one_3']

dep2_drop['two_1','two_2','two_3']
(Oct-15-2018, 11:28 AM)Larz60+ Wrote: [ -> ]This is a guess as I haven't used tkinter in a while, try changing line 29 to:
tkvar.trace('w', lambda: change_dropdown)

This quote gives an error
Error:
TypeError: <lambda>() takes 0 positional arguments but 3 were given