我需要在 GtkSourceView 中打开文件并滚动到特定的行。作为一种调试器 gui,它需要经常执行此活动(在切换堆栈帧时),没有瞬态伪影 - 内容的可见重新调整和闪烁。目前,我正在使用以下方法:
from gi.repository import GtkSource
class MyClientWindow:
def __init__(self):
self.__sourceview = GtkSource.View()
self.__sourceview.connect('size-allocate', self.__source_resize)
...
def __source_resize(self, widget, allocation):
self.__sourceview.scroll_to_mark(self.__sourceview.get_buffer().get_insert(), 0.25, False, 0, 0)
使用这种方法会出现明显的闪烁。在上面的 __source_resize 中放置 1s sleep 表明 GtkSourceView 在几遍中得到重新调整(在源突出显示之前和之后可见地绘制,以及一些额外的验证。)
是否有另一种方法可以强制 GtkSource.View 计算行高并执行验证而不在屏幕上绘图,或者在我设置缓冲区内容时强制它立即计算行高而不稍后将其推迟到空闲作业?如果不是,大约需要覆盖多少 GtkSource.View 控件才能获得所需的行为?
注意:我尝试使用 Gtk.Stack 在不可见的“后”视图中完成工作,并在稍后使用 Gtk.idle_add 使其可见,但我的印象是视图的可见性是行验证的关键。至少到目前为止,它没有提供预期的结果。