2010-01-08 123 views
0

我試圖通過在單詞周圍繪製邊框來顯示 gtk.TextView中某個子字符串的「選擇」。在我目前發現的TextView中標記 文本的唯一方法是將TextTags與 修改的屬性一起放置。這似乎沒有提供一種方式來繪製邊框,但是,GTK支持這個問題還是這個問題與ONLT PYGTK在gtk.TextView上繪製線條

回答

1

我想出瞭如何在文本視圖上畫!

開始於讓我們假設對你的gtk.TextView的引用位於一個名爲viewer的變量中,在你的類之一中 另外,draw函數必須用名爲expose-event的事件調用,否則圖形將被刷新並不會停留在屏幕

接下來的部分是gtk.TextView由7種gtk.gdk.windows的對其中U可以得出

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.TextView上我們必須借鑑gtk.TEXT_WINDOW_TEXT

的示例代碼如下所示

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 – 2010-01-13 15:58:54

0

gtk.TextBuffer代碼用於設置一個或多個預定義的文本屬性。沒有子類別,這僅限於gtk.TextTag的屬性,並且不包含類似於邊框或大綱屬性的任何內容。 PyGTK和普通GTK +在這方面沒有區別。

雖然有點哈克,做你想要做什麼,最簡單的方法是連接到您的gtk.TextViewexpose-event,讓您的字符串的座標,並借鑑event.window,這是在公開提供該事件的gdk.Window回電話。 (請注意,您不必獲取並存儲gtk.TEXT_WINDOW_TEXT窗口,您只需要檢查回調中顯示事件的窗口,如果它不是用於文本窗口,則可能忽略暴露。 )

相反,您大概可以繼承TextBuffer/TextView/TextTag中的一個或多個以添加border標記,但是否這樣做是合理的是另一個問題。