在gtk.TextView上绘制线条

时间:2010-01-08 12:01:10

标签: pygtk

我正在尝试显示某个子字符串的“选择” gtk.TextView通过在单词周围绘制边框。唯一的标记方式 到目前为止我发现的TextView中的文本是通过放置TextTags 修改后的属性这似乎没有提供绘制边框的方法, 虽然,GTK支持这个还是这个问题与ONLT PYGTK

2 个答案:

答案 0 :(得分:1)

我想出了如何在文本视图上绘图!

首先让我们假设你的gtk.TextView的引用是一个名为viewer的变量,在你的一个类里面 此外,必须使用名为expose-event的事件调用draw函数,否则将刷新图形并且不会保留在屏幕上

下一部分是gtk.TextView由7种类型的gtk.gdk.windows组成,你可以在其上绘制

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

答案 1 :(得分:0)

gtk.TextBuffer标签中用于设置一个或多个预定义的文本属性。没有子类化,这仅限于gtk.TextTag的属性,并且不包括类似于border或outline属性的任何内容。在这方面,PyGTK和普通GTK +之间没有区别。

虽然有点hacky,但最简单的方法是连接到expose-event的{​​{1}},获取字符串的坐标并在gtk.TextView上绘图,这是曝光回调中提供的事件的event.window

(注意,您不必获取并存储gtk.TEXT_WINDOW_TEXT窗口,您只需要在回调中检查公开事件的窗口,如果不是文本窗口,可能会忽略公开窗口。)

相反,您可能会将TextBuffer / TextView / TextTag中的一个或多个子类化为一个gdk.Window标记,但是这样做是否合理是另一个问题。

相关问题