如何在GtkSource中选择和滚动特定行

时间:2018-07-27 12:34:46

标签: python gtk3

在阅读并尝试了很多想法(包括SO的一些建议)之后,我仍然没有找到一种在加载文件后滚动到GtkSource.View中特定行的有效方法。

我正在使用Gtk-3,自省和Python3。我尝试了get_iter_at_lineplace_cursorplace_cursor_onscreen等的许多组合。甚至尝试或多或少地计算滚动位置并操纵vadjustment

一个例子:

    itr = self.tbff.get_iter_at_line(linenr)
    self.tbff.place_cursor(itr)
    self.tview.place_cursor_onscreen()

我怀疑问题可能出自尚未渲染小部件的事实。我还尝试将实际滚动推迟到GLib.idle_add,但这也没有解决。在一种组合中,当我尝试到达第124行时,我发现该小部件滚动到第55行左右:

def go_to_line_number(self, linenr):
    itr = self.tbff.get_iter_at_line(linenr)
    mark = Gtk.TextMark(
                name = "exec_point",
                left_gravity = True)
    self.tbff.add_mark(mark, itr)
    self.tview.scroll_mark_onscreen(mark)

还有一点有趣的地方:我认为延迟上一个示例中的scroll_mark_onscreen可能会解决(通过使用GLib.timeout_add)。是的!但是时间是不合理的。在300毫秒时,它仍然不会滚动到标记,但在400毫秒时,它会起作用。我不认为这是文件长度(只有250行),所以我怀疑它可能是滚动动画。

有人能指出我正确的方向吗?

约翰

0 个答案:

没有答案