Python 搜索后获取Gtk组合框的活动项
我在PyGTK中创建了一个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),所以在组合框中滚动寻找一个特定的项目是相当乏味的。但是,当我使用输入项输入文本时,搜索项目,然后选择
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,就是这样!我没有考虑在完成者级别检查它。非常感谢。我还预先检查组合的
已更改的信号,这样我现在就可以捕获大多数情况。