Simple ttk ComboBox demo

后端 未结 2 828
甜味超标
甜味超标 2020-12-08 23:31

This should be very simple but I am really struggling to get it right. All I need is a simple ttk ComboBox which updates a variable on change of selection.

In the ex

相关标签:
2条回答
  • 2020-12-08 23:55

    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)
            # ...
    
    0 讨论(0)
  • 2020-12-09 00:05

    In the more general case, if you need to get the value of a Variable when it is updated, it would be advisable to use the tracing facility built into 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
    
    0 讨论(0)
提交回复
热议问题