在Liststore中将项目动态添加到CellRendererCombo:Pygtk

编程入门 行业动态 更新时间:2024-10-11 05:28:50
本文介绍了在Liststore中将项目动态添加到CellRendererCombo:Pygtk的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试将商品动态添加到CellRendererCombo.请参见下面的代码.当我单击'Samsung'时,组合框中列出了相应的项目.现在的问题是,当我单击'LG'时,列出了与三星"相对应的项目.简而言之,组合框显示的是先前选择的键的项目,而不是当前键的项目.

I am trying add items to CellRendererCombo dynamically. See the code below. 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 combo box is showing items for the previously selected key, not for the current key.

我该如何解决这个问题?

How can I solve this issue?

#!/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", selfbo_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()

推荐答案

问题已解决.问题是因为在发出GtkCellEditable::editing-started信号之前已设置弹出式组合框上的模型.并且为combobox中的下一个弹出窗口设置了editing-started处理程序.

Problem solved. The issue was because model on combobox that pops-up is set before GtkCellEditable::editing-started signal is emitted. And the editing-started handler was set for the next pop-up in combobox.

因此,我创建了另一种方法来捕获列表存储已更改"的信号,并编写了用于在该方法中动态填充cellrendercombobox的列表存储的代码.

So I create another method to capture liststore "changed" signal, and wrote the code to dynamically populate the liststore for cellrendercombobox in that method.

treeviewmodel = self.tree_view.get_model() tree_selection = self.tree_view.get_selection() tree_selection.connect("changed", self.onSelectionChanged) ...... def onSelectionChanged(self,tree_selection) : value=None (model, pathlist) = tree_selection.get_selected_rows() for path in pathlist : tree_iter = model.get_iter(path) value = model.get_value(tree_iter,0) print value if value: <code to populate the liststore>

更多推荐

在Liststore中将项目动态添加到CellRendererCombo:Pygtk

本文发布于:2023-11-12 11:18:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1581349.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:中将   项目   动态   Liststore   CellRendererCombo

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!