Gtk.TextView很多TextTags很慢

时间:2014-07-24 16:52:43

标签: python performance gtk gtk3

我需要不断更改TextView部分的样式以进行语法突出显示。然而,大约1,000 Gtk.TextTags它变得极其缓慢。我不想使用Gtk.SourceView,因为我想自己自定义样式。看起来很奇怪1000个标签足以使TextView不稳定,因为文字处理文档可能有那么多。

此代码给出了一个缓慢的例子。使用1,000个字符时,它开始花费大约半秒钟来更新标签。

from gi.repository import Gtk

class MyWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self)
        self.set_default_size(600, 400)

        self.scrolledwindow = Gtk.ScrolledWindow()
        self.textview = Gtk.TextView()

        buffer = self.textview.get_buffer()
        buffer.create_tag("tag", background="orange")
        buffer.connect("end-user-action", self.action)

        self.scrolledwindow.add(self.textview)
        self.add(self.scrolledwindow)

    def action(self, buffer):
        start = buffer.get_start_iter()
        veryend = buffer.get_end_iter()
        buffer.remove_all_tags(start, veryend)
        end = buffer.get_iter_at_offset(1)

        for i in range(len(buffer.get_text(start, veryend, False))//2+1):
            buffer.apply_tag_by_name("tag", start, end)
            start.forward_chars(2)
            end.forward_chars(2)

win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

我可以加快速度吗?有没有解决方法?

1 个答案:

答案 0 :(得分:0)

如果有人通过Google找到了这个问题,让我告诉您,这里的问题是删除所有标签并再次添加。当然,这是非常耗时的操作,不应以这种方式进行编码。