搜索后获取Gtk组合框的活动项



我在PyGTK中创建了一个Gtk.ComboBox,并使用以下代码完成了条目:

completer = Gtk.EntryCompletion()
completer.set_model(combo.get_model())
completer.set_text_column(0)
combo.get_child().set_completion(completer)

我确实有一些项目(>400),所以在组合框中滚动寻找特定的项目是相当乏味的。但是,当我使用条目输入文本、搜索项目然后选择项目时,响应changed信号调用get_active()会返回-1。。。?当滚动到项目而不搜索然后选择它时,它会按预期工作。

我可以使用combo.get_child().get_text()获取条目中的文本,但我无法搜索模型,因为每个条目可能会出现几个项目。

如何搜索文本、选择项目,然后获取原始模型的选定行?

#!/usr/bin/python
from gi.repository import Gtk
class MyWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.add_combo()
    def add_combo(self):
        store = Gtk.ListStore(str)
        combo = Gtk.ComboBox(model=store, has_entry=True)
        combo.set_entry_text_column(0)
        store.append(('Hello',))
        store.append(('World',))
        completer = Gtk.EntryCompletion()
        completer.set_model(combo.get_model())
        completer.set_text_column(0)
        combo.get_child().set_completion(completer)
        combo.connect('changed', self.changed)
        self.add(combo)
    def changed(self, combo):
        print 'active', combo.get_active()
win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

要复制:在条目中键入W,选择World,得到active -1,我期望active 1

完成不知道combo(combo也不知道完成),因此无法更新活动值。我认为这应该做到:

# in initialization:
completer.connect("match-selected", self.match_selected)
self.combo = combo
def match_selected(self, completion, model, iter):
    self.combo.set_active_iter (iter)

也就是说,这仍然不包括有人只写匹配字符串的可能性。。。

最新更新