I am trying add items to CellRendererCombo dynamically. See the code below. The second column is combobox. When I click on 'Samsung' the corresponding items is listed in the combo box. Now the problem is, when I click 'LG', the items corresponds to 'Samsung' is listed. In short, the combobox is showing Items for the previously selected key, not for the current key.
How to solve this Issue??? Thanks in advance. :)
Code:
#!/usr/bin/env python
import gtk,os
class CellRendererCombo:
def __init__(self):
window = gtk.Window()
window.set_default_size(200, 200)
liststore_hardware = gtk.ListStore(str, str)
liststore_hardware.append(["Television", "Samsung"])
liststore_hardware.append(["Mobile Phone", "LG"])
liststore_hardware.append(["DVD Player", "Sony"])
treeview = gtk.TreeView(liststore_hardware)
column_text = gtk.TreeViewColumn("Text")
column_combo = gtk.TreeViewColumn("Combo")
treeview.append_column(column_text)
treeview.append_column(column_combo)
cellrenderer_text = gtk.CellRendererText()
column_text.pack_start(cellrenderer_text, False)
column_text.add_attribute(cellrenderer_text, "text", 0)
self.cellrenderer_combo = gtk.CellRendererCombo()
self.cellrenderer_combo.set_property("editable", True)
self.cellrenderer_combo.set_property("text-column", 0)
column_combo.pack_start(self.cellrenderer_combo, False)
column_combo.add_attribute(self.cellrenderer_combo, "text", 1)
window.connect("destroy", lambda w: gtk.main_quit())
self.cellrenderer_combo.connect("editing-started", self.populate_combo)
self.cellrenderer_combo.connect("edited", self.combo_changed, liststore_hardware)
window.add(treeview)
window.show_all()
def combo_changed(self, widget, path, text, model):
model[path][1] = text
def populate_combo(self,*args):
liststore_manufacturers = gtk.ListStore(str)
manufacturers={}
manufacturers['Samsung'] = ["Samsung", "Item1","Item2", "Item3", "Item4"]
manufacturers['LG'] = ["LG", "Item5", "Item6", "Item7", "Item8", "Item9",'Item10']
manufacturers['Sony'] = ["Sony", "Item11", "Item12", "Item13", "Item14", "Item15",'Item16']
catgry=self.cellrenderer_combo.get_property ("text") # read the content of combobox
for item in manufacturers[catgry]:
liststore_manufacturers.append([item])
self.cellrenderer_combo.set_property("model", liststore_manufacturers)
#
CellRendererCombo()
gtk.main()