【问题标题】:GTK SourceView scroll to mark not workingGTK SourceView 滚动以标记不工作
【发布时间】:2018-02-22 18:10:52
【问题描述】:

我正在尝试用文本填充 SourceView 的缓冲区,然后滚动以使特定行可见,如下所示:

lines = '....'.split('\n')
line_number = 76 # For instance, assuming lines has at least this many lines
buffer = view.get_buffer()
for line in lines:
  buffer.insert(end_iter, line + '\n')
iter = buffer.get_iter_at_line()
mark = buffer.get_mark('insert')
buffer.move_mark(mark, iter)
mark = buffer.get_mark('selection_bound')
buffer.move_mark(mark, iter)
view.scroll_to_mark(mark, 0.3, True, 0, 0.5)

这会滚动到缓冲区中或多或少的随机位置。我在这里做错了吗?或者这根本行不通?

【问题讨论】:

  • 我不确定scroll_to_mark,但scroll_to_iter 适合我。
  • scroll_to_iter 对我不起作用。我相信这是因为我在填充文本缓冲区后立即调用它,并且scroll_to_iter 依赖于在空闲处理程序中计算的行高。这在scroll_to_iter 的文档中有所描述,该文档建议使用scroll_to_mark 来“避免奇怪”。我只是得到了另一种奇怪的感觉。
  • 您已应用标签pygtkgtk3pyobject。这些不兼容。要么是 pygtk 和 gtk2,要么是 gtk3 和 pyobject。为了清楚起见,请修正。

标签: gtk3 pygobject gtksourceview


【解决方案1】:

你是对的,scroll_to_iter 依赖于空闲重新计算。就此而言,scroll_to_mark 也是如此。这对我有用:

from gi.repository import GLib
#........ code here
GLib.idle_add(view.scroll_to_mark, mark, 0.1, True, 0.0, 0.5)

【讨论】:

  • 这似乎有点奇怪,因为 gtksourceview-3 和 introspection + GLib 需要一个额外的参数 - 优先级。即使将该参数提供为GLib.PRIORITY_DEFAULT_IDLE,这个技巧(idle_add)也不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多