2010-01-08 14 views
0

gtk.TextView에 특정 하위 문자열의 "선택"을 표시하려면 단어 주위에 테두리를 그려야합니다. 지금까지 찾은 TextView에서 텍스트를 표시하는 유일한 방법은 수정 된 속성 이있는 TextTags를 배치하는 것입니다. 이것은 국경을 그릴 수있는 방법을 제공하지 않는 것 같지만, GTK가이 것을 지원합니까? 아니면 ONYT PYGTK가이 문제입니까?gtk.TextView에 선 그리기

답변

1

나는 텍스트 뷰를 그리는 방법을 찾았습니다 !!!

시작하려면 gtk.TextView에 대한 참조가 뷰어라는 변수에 있다고 가정하십시오. ur 클래스 중 하나 또한 draw 함수는 expose-event라는 이벤트와 함께 호출되어야합니다. 그렇지 않으면 드로잉이 새로 고쳐집니다 그리고 u는 gtk.TextView에 표시하는 도면의 경우

gtk.TEXT_WINDOW_WIDGET 
gtk.TEXT_WINDOW_TEXT 
gtk.TEXT_WINDOW_LEFT - not displayed by default 
gtk.TEXT_WINDOW_RIGHT - not displayed by default 
gtk.TEXT_WINDOW_TOP - not displayed by default 
gtk.TEXT_WINDOW_BOTTOM 
gtk.TEXT_WINDOW_PRIVATE 

을 그릴 수있는

다음 부분은 gtk.gdk.windows의 7 종류의 gtk.TextView으로 구성되어 화면에 유지되지 않습니다 그리기해야합니다 gtk.TEXT_WINDOW_TEXT

예제 코드가 같은 gtk.TextBuffer 태그에서

if(viewer!=None):   
    viewer.connect("expose-event", expose_view) 
     self.drawable=viewer.get_window(gtk.TEXT_WINDOW_TEXT) 

def expose_view(self,window,event): 
    if(self.drawable!=None):    
    self.drawable.draw_line(self.drawable.new_gc(),1,1,30,30) 
    # (1,1) and (30,30) are the coordinates and u can give the values accordingly 
+0

위의 코드는 약간의 사소한 문제점이 있지만, 나에게도 도움이되었습니다. 저는 '배경'에 줄이 그어져 있지 않습니다. 참조 : http://code.google.com/p/key-train/source/browse/keytrain_textview.py –

0

아래 그림은 하나 이상의 사전 정의 된 텍스트 속성을 설정하는 데 사용됩니다. 하위 클래스를 지정하지 않으면이 속성은 gtk.TextTag의 속성으로 제한되며 테두리 또는 개요 속성과 비슷한 내용은 포함되지 않습니다. 이와 관련하여 PyGTK와 일반 GTK +에는 차이점이 없습니다.

다소 해키, 당신이 원하는 일을 할 수있는 가장 쉬운 방법은, 당신의 gtk.TextViewexpose-event에 연결하여 문자열의 좌표를 얻고 노출에서 제공되는 이벤트의 gdk.Windowevent.window에 그리는 동안 콜백.

(gtk.TEXT_WINDOW_TEXT 윈도우를 가져와 저장할 필요가 없다는 점에 유의하십시오. 콜백에서 노출 이벤트가 어떤 윈도우인지 확인하고, 텍스트 윈도우가 아닌 경우 노출을 무시하면됩니다.)

대신 TextBuffer/TextView/TextTag 중 하나 이상을 서브 클래스로 지정하여 border 태그를 추가 할 수는 있지만 합리적인지 여부는 또 다른 질문입니다.