How to make a ttk.Combobox callback

17,788

Solution 1

You can bind to the <<ComboboxSelected>> event which will fire whenever the value of the combobox changes.

def TextBoxUpdate(event):
    ...
FriendListComboBox.bind("<<ComboboxSelected>>", TextBoxUpdate)

Solution 2

Use IntVar and StringVar .

You can use the trace method to attach “observer” callbacks to the variable. The callback is called whenever the contents change:

import Tkinter
import ttk

FriendMap = {}
UI = Tkinter.Tk()
UI.geometry("%dx%d+%d+%d" % (330, 80, 500, 450))
UI.title("User Friend List Lookup")

def TextBoxUpdate():
    if not  FriendListComboBox.get() == "":
        FriendList = FriendMap[FriendListComboBox.get()]
        FriendListBox.insert(0,FriendMap[UserListComboBox.get()])`
def calback():
    print("do something")

#Imports the data from the FriendList.txt file
with open("C:\Users\me\Documents\PythonTest\FriendList.txt", "r+") as file:
for line in file:
    items = line.rstrip().lower().split(":")
    FriendMap[items[0]] = items[1]

#Creates a dropdown box with all of the keys in the FriendList file
value = StringVar()
value.trace('w', calback)
FriendListKeys = FriendMap.keys()
FriendListKeys.sort()
FriendListComboBox =   ttk.Combobox(UI,values=FriendListKeys,command=TextBoxUpdate,textvariable=value)`

the callback function will be called when the comobox changes

Share:
17,788
Marek
Author by

Marek

Updated on June 05, 2022

Comments

  • Marek
    Marek almost 2 years

    I was wondering if there was a way to invoke a call back from a ttk.Combobox when the user selects an item from the drop-down list. I want to check to see what the value of the combobox is when an item is clicked so that I can display the associated dictionary value given the combobox key.

    import Tkinter
    import ttk
    
    FriendMap = {}
    UI = Tkinter.Tk()
    UI.geometry("%dx%d+%d+%d" % (330, 80, 500, 450))
    UI.title("User Friend List Lookup")
    
    def TextBoxUpdate():
        if not  FriendListComboBox.get() == "":
            FriendList = FriendMap[FriendListComboBox.get()]
            FriendListBox.insert(0,FriendMap[FriendListComboBox.get()])`
    
    #Imports the data from the FriendList.txt file
    with open("C:\Users\me\Documents\PythonTest\FriendList.txt", "r+") as file:
    for line in file:
        items = line.rstrip().lower().split(":")
        FriendMap[items[0]] = items[1]
    
    #Creates a dropdown box with all of the keys in the FriendList file
    FriendListKeys = FriendMap.keys()
    FriendListKeys.sort()
    FriendListComboBox = ttk.Combobox(UI,values=FriendListKeys,command=TextBoxUpdate)`
    

    The last line obviously doesn't work since there is no 'command' for Comboboxes but I am not really sure what I need to do here to get that to work. Any help would be appreciated.

  • Marek
    Marek about 8 years
    Thanks! That is exactly what I needed.
  • Terry Brown
    Terry Brown over 2 years
    I get _tkinter.TclError: unknown option "-command" taking this approach