Search code examples
pythontkintercombobox

Python tkinter/ttk Combobox- I'm wanting each option in a Python ttk-combobox to display 1 list but have values from a 2nd list


database_list = ["Movies", "Movies", "Games", "Music", "Games", "Music"]

id_list = [0,1,2,3,4,5]

my_combobox = ttk.Combobox(root, **values=database_list**)
my_combobox.grid(row=1, column=1)

I want the user to see "Movies", "Movies", "Games", "Music", "Games", "Music" shown in the dropbox physically.. but when the user submits the form, I want the form to send the id values from the 2nd list instead of their string/face values.. the same way HTML dropboxes work..

Is there an attribute for a ttk combobox that I'm not seeing in the docs?

I tried generating a list of all of the configure options for a ttk combobox but I'm not seeing one that seems to fit what I'm doing.

options = my_combobox.configure()
for option in options:
    print(option)

Solution

  • You can use .current() function of Combobox to get the index of the selected value, and then use this index to get the ID from id_list.

    Below is a simple example:

    import tkinter as tk
    from tkinter import ttk
    
    database_list = ["Movies", "Movies", "Games", "Music", "Games", "Music"]
    id_list = [0,1,2,3,4,5]
    
    root = tk.Tk()
    
    my_combo = ttk.Combobox(root, values=database_list, state="readonly")
    my_combo.grid(row=1, column=1)
    
    def submit():
        idx = my_combo.current()
        if idx >= 0:
            id_value = id_list[idx]
            print(f"{my_combo.get()} -> {id_value}")
    
    tk.Button(root, text="Submit", command=submit).grid(row=1, column=2)
    
    root.mainloop()