Simple demo version of ttk ComboBox

It should be very simple, but I'm really trying to fix it. All I need is a simple ttk ComboBox that updates the variable when the selection changes.

In the example below, I need the value_of_combo variable to value_of_combo updated automatically every time a new choice is made.

 from Tkinter import * import ttk class App: value_of_combo = 'X' def __init__(self, parent): self.parent = parent self.combo() def combo(self): self.box_value = StringVar() self.box = ttk.Combobox(self.parent, textvariable=self.box_value) self.box['values'] = ('X', 'Y', 'Z') self.box.current(0) self.box.grid(column=0, row=0) if __name__ == '__main__': root = Tk() app = App(root) root.mainloop() 
+8
python tkinter ttk
source share
2 answers

Just bind the virtual event <<ComboboxSelected>> to the Combobox widget:

 class App: def __init__(self, parent): self.parent = parent self.value_of_combo = 'X' self.combo() def newselection(self, event): self.value_of_combo = self.box.get() print(self.value_of_combo) def combo(self): self.box_value = StringVar() self.box = ttk.Combobox(self.parent, textvariable=self.box_value) self.box.bind("<<ComboboxSelected>>", self.newselection) # ... 
+13
source share

In a more general case, if you need to get the value of a variable when updating it, it would be advisable to use the built-in trace object in them.

 var = StringVar() # create a var object # define the callback def tracer(name, idontknow, mode): # I cannot find the arguments sent to the callback documented # anywhere, or how to really use them. I simply ignore # the arguments, and use the invocation of the callback # as the only api to tracing print var.get() var.trace('w', tracer) # 'w' in this case, is the 'mode', one of 'r' # for reading and 'w' for writing var.set('Foo') # manually update the var... # 'Foo' is printed 
+4
source share

All Articles