我想将代码完成添加到我的小应用程序中。我创建了我的补全提供程序,将其添加到我的源视图中的补全对象中,但不幸的是,有些东西不起作用:P当我运行我的测试应用程序(如下所列)时,我得到错误:
app = Application()
File "./test.py", line 37, in __init__
self.__completion_window.show()
TypeError: providers must be a list为什么会发生这种情况?我如何修复它?
以下是生成此错误的示例应用程序:
#!/usr/bin/env python
import keyword
import gtk
import gobject
import gtksourceview2
class MyCompletionProvider(gobject.GObject, gtksourceview2.CompletionProvider):
def __init__(self):
gobject.GObject.__init__(self)
def do_get_name(self):
return 'PythonKeywords'
def do_get_activation(self):
return gtksourceview2.COMPLETION_ACTIVATION_USER_REQUESTED
def do_match(self, context):
return True
def do_get_start_iter(self, context):
return context.get_iter()
def do_activate_proposal(self, proposal, iter):
return True
def do_populate(self, context):
self.completions = []
for compl in keyword.kwlist:
self.completions.append(
gtksourceview2.CompletionItem(
compl.name, compl.complete, info=compl.type))
context.add_proposals(self, self.completions, True)
gobject.type_register(MyCompletionProvider)
class Application(gtk.Window):
def __init__(self):
gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
self.connect('destroy', lambda e: gtk.main_quit())
self.set_size_request(640, 480)
self.__buffer = gtksourceview2.Buffer()
self.__buffer.set_text('a' * 20)
self.__editor = gtksourceview2.View(self.__buffer)
self.__completion_window = self.__editor.get_completion()
self.__completion_window.add_provider(MyCompletionProvider())
self.add(self.__editor)
self.show_all()
self.__completion_window.show()
app = Application()
gtk.main()发布于 2015-03-17 00:45:46
您必须使用上下文的add_proposal方法提供CompletionItem实例列表
def do_populate(self, context):
...
self.completions = []
for compl in script.completions():
self.completions.append(sview.CompletionItem(compl.name, compl.complete, info=compl.type))
context.add_proposals(self, self.completions, True)更重要的是,你必须实现所有接口的方法,比如do_match,do_get_start_iter等等。我唯一没有使用的是do_get_priority,因为我没有找到覆盖GInterface属性的方法。
https://stackoverflow.com/questions/26442677
复制相似问题