我正在尝试创建一个简单的列表存储程序,其中一个给定行中的值(列)能够通过下拉选择进行更改。我已经得到了下拉行,但是,我无法将新值提交给列作为活动值。
在http://python-gtk-3-tutorial.readthedocs.io/en/latest/cellrenderers.html使用PyGtk教程,我看到他们使用
def __init__
renderer_combo = Gtk.CellRendererCombo()
renderer_combo.set_property("editable", True)
renderer_combo.set_property("model", liststore_manufacturers)
renderer_combo.set_property("text-column", 0)
renderer_combo.set_property("has-entry", False)
renderer_combo.connect("edited", self.on_combo_changed)
...
def on_combo_changed(self, widget, path, text):
self.liststore_hardware[path][1] = text
将此代码复制到我的解释器中,并查看可以成功更改ComboBox值的程序,我尝试复制他们的方法。这导致我创建以下内容:
def __init__
...
self.col_priorityrenderer = Gtk.CellRendererCombo()
self.col_priorityrenderer.set_property("editable", True)
self.col_priorityrenderer.set_property("model", liststore_manufacturers)
self.col_priorityrenderer.set_property("text-column", 0)
self.col_priorityrenderer.set_property("has-entry", False)
self.col_priorityrenderer.connect("edited", self.on_combo_changed)
priorityCombo = Gtk.ListStore(str)
priorityCombo.append(["Top"])
priorityCombo.append(["High"])
priorityCombo.append(["Medium"])
priorityCombo.append(["Low"])
self.col_priority_renderer.set_property("model", priorityCombo)
def on_combo_changed(self, widget, path, text):
model = widget.get_property("model")
model[path][1] = text
使用此代码,我收到错误:
IndexError: column index is out of bounds: 1
我已将1更改为0,并且我没有收到该错误,但它也不会更改活动项目。我已经尝试了大约3天来绕过如何让这个正常工作无济于事。为什么在这种情况下索引1超出界限?