Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 搜索后获取Gtk组合框的活动项_Python_Gtk_Pygtk - Fatal编程技术网

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

Python 搜索后获取Gtk组合框的活动项,python,gtk,pygtk,Python,Gtk,Pygtk,我在PyGTK中创建了一个Gtk.ComboBox,使用以下代码完成输入: completer = Gtk.EntryCompletion() completer.set_model(combo.get_model()) completer.set_text_column(0) combo.get_child().set_completion(completer) 我确实有一些项目(>400),所以在组合框中滚动寻找一个特定的项目是相当乏味的。但是,当我使用输入项输入文本时,搜索项目,然后选择

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

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

我可以使用
combo.get\u child().get\u 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
完成操作不知道组合操作(组合操作也不知道完成操作),因此无法更新活动值。我认为这应该做到:

# 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)

也就是说,这还不包括有人仅仅编写匹配字符串的可能性…

Nice,就是这样!我没有考虑在完成者级别检查它。非常感谢。我还预先检查组合的
已更改的
信号,这样我现在就可以捕获大多数情况。