Drop down menu 在激活组合框之前,需要在树视图中选择两次该项

Drop down menu 在激活组合框之前,需要在树视图中选择两次该项,drop-down-menu,combobox,gtk,pygtk,gtktreeview,Drop Down Menu,Combobox,Gtk,Pygtk,Gtktreeview,我正在使用GTK+和PyGTK绘制GUI 我在树视图中创建了一个组合框。但问题是,当我第一次单击某个项目时,下拉箭头不敏感(变灰)。我必须单击另一个项目,然后再次返回该项目,以使下拉箭头再次敏感 这是TreeView中ComboBox的标准吗?如果你有其他语言的补丁,我也可以接受 可以找到一个例子。 他还面临一些其他问题,但他的代码也说明了这个问题。您上面提到的代码的问题似乎是,当您开始编辑时,组合框实际上只有1个元素,这使得下拉功能无效(因此处于非活动状态)。要使它按我猜想的那样运行,您所要做

我正在使用GTK+和PyGTK绘制GUI

我在树视图中创建了一个组合框。但问题是,当我第一次单击某个项目时,下拉箭头不敏感(变灰)。我必须单击另一个项目,然后再次返回该项目,以使下拉箭头再次敏感

这是TreeView中ComboBox的标准吗?如果你有其他语言的补丁,我也可以接受

可以找到一个例子。
他还面临一些其他问题,但他的代码也说明了这个问题。

您上面提到的代码的问题似乎是,当您开始编辑时,
组合框实际上只有1个元素,这使得下拉功能无效(因此处于非活动状态)。要使它按我猜想的那样运行,您所要做的就是使用另一个信号来执行
self.populate\u combo
。在创建treeview后,我添加了两行代码以使其正常工作:

    treeview = gtk.TreeView(liststore_hardware)
    sel = treeview.get_selection()
    sel.connect("changed", self.populate_combo)
也就是说,我使更改的选择导致组合的填充,这意味着当控件返回到主循环时,组合中有多个元素。因此,下拉菜单起作用

我还注释掉了之前的
编辑启动
信号,因为它没有添加任何与程序当前结构相关的内容

    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)
编辑:

再想一想,在运行
\uuu init\uuu
之后,该模型是一个
None
,而不是像我上面写的那样每行1个长度,这使得缺少下拉功能更加合理

评论:

如果更改行(或编辑)导致强烈需要重写
列表存储
,那么您引用的代码和我对它的更改都是合理的。我真的不确定什么样的场景需要这样做。另一方面,如果
TreeView
combox
ListStore
的内容因搜索操作或在别处执行的过滤而变化,则该搜索而不是行的更改应调用
填充组合

因此,在手边代码范围内的另一个解决方案,我上面建议的事件也可以被注释掉,并且是一个简单的

    self.populate_combo()
添加为
init
函数的最后一行


此外,如果在应用程序运行期间需要重新填充组合,我建议每次修改当前的
ListStore
,而不是创建一个新的组合,前提是更改不会太大(在这种情况下,创建新组合可能是最快和最简单的)。

谢谢!我完全明白你的意思。所以我应该用树视图的信号来代替。很高兴它有帮助,但是看看我上面的新评论,因为它可能有助于做出更合理的设计。明白了!让我对如何使用PyGTK有了更多的了解。