在阅读并尝试了很多想法(包括SO的一些建议)之后,我仍然没有找到一种在加载文件后滚动到GtkSource.View中特定行的有效方法。
我正在使用Gtk-3,自省和Python3。我尝试了get_iter_at_line
,place_cursor
,place_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行),所以我怀疑它可能是滚动动画。
有人能指出我正确的方向吗?
约翰