2014-10-18 1 views
1

작은 응용 프로그램에 코드 완성을 추가하고 싶습니다. 내 소스보기에 완료 객체에 추가하지만 불행히도 뭔가가 작동하지 않는, 내 완료 제공자를 만들어 : P를 내가 (아래) 내 테스트 응용 프로그램 I 오류 얻을 실행하면 :gtksourceview2.CompletionProvider를 구현하는 방법은 무엇입니까?

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

답변

1

당신이 컨텍스트

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) 

그리고 더 많은 방법을 add_proposal 사용 CompletionItem 인스턴스의 목록을 제공 할 필요가 : 여기

이 오류를 생성 예제 응용 프로그램입니다 do_match, do_get_start_iter 등의 인터페이스 메소드. GInterface 속성을 덮어 쓰는 방법을 찾지 못했기 때문에 do_get_priority 만 사용하지 않았습니다.

+0

안녕하세요, 내 질문을 밖으로 파고 들었습니다. :) 내 코드에 아이디어를 적용했지만 불행히도 오류가 변경되지 않았습니다. 업데이트 된 예제 응용 프로그램으로 내 게시물을 편집했습니다. 시간과 아이디어가 있다면 기꺼이 테스트 해보십시오 :) – BPS

관련 문제