Obtain the value of a dictionary after select on of the combobox value Obtain the value of a dictionary after select on of the combobox value tkinter tkinter

Obtain the value of a dictionary after select on of the combobox value


To display only the keys (A, B and C) in the Combobox widget, you need change self.box_values=mydict.keys() to self.box_values=list(self.mydict.keys()) and this line:

self.box = ttk.Combobox(self.parent, textvariable=self.box_value,values= mydict,state='readonly')

to (passing the list of keys to values option instead of the dictionary mydict itself):

self.box = ttk.Combobox(self.parent, textvariable=self.box_value,values= self.box_values,state='readonly')

Once this done, in textArea() you will need to use get() method to retrieve the value of the correspondent chosen key you select from the Combobo wiget.

Program:

Here is the implementation of the scenario above:

from tkinter import *from tkinter import ttkclass Application:    def __init__(self, parent):        self.parent = parent        self.value_of_combo='A'        self.combo()    def textArea(self, e):        self.value_of_combo = self.box.get()        # Get the content of the Text widget        #print(self.mydict.get(self.value_of_combo))        r=self.thistextArea.get('1.0','1.end')        # If it is empty then insert the selected value directly        if not r:           self.thistextArea.insert(INSERT, self.mydict.get(self.value_of_combo))        # If not empty then delete existing text and insert the selected value        else:           self.thistextArea.delete('1.0','1.end')           self.thistextArea.insert(END, self.mydict.get(self.value_of_combo))    def combo(self):        self.box_value = StringVar()        self.mydict={'A':'Haha What','B':'Lala Sorry','C':'Ohoh OMG'}        self.box_values=list(self.mydict.keys())        #print(self.box_values)        self.box = ttk.Combobox(self.parent, textvariable=self.box_value,values= self.box_values,state='readonly')        self.box.bind('<<ComboboxSelected>>',self.textArea)        self.box.current(0)        self.box.grid(column=0, row=0)        self.thistextArea=Text(self.parent,height=50,width=50)        self.thistextArea.grid(column=0,row=1)root = Tk()app = Application(root)root.mainloop()