我正在尝试使用 PyGTK 编写一个文本查看器小部件,它在主查看窗口旁边显示行号。当然,我希望行号和主窗口彼此同步滚动。不过,我不知道如何让它工作。现在我正在这样做。TextViewer 是 HBox 的子类,它创建两个 TextView 并将它们打包到自身的属性名称 linenums 和 mainview 下。
self.textviewer = TextViewer.TextViewer(self.toplevel)
sw = gtk.ScrolledWindow()
sw.set_vadjustment(self.textviewer.mainview.get_vadjustment())
sw.set_hadjustment(self.textviewer.mainview.get_hadjustment())
sw.add_with_viewport(self.textviewer)
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
如果我取出两条 set_Xadjustment 行,则嵌入的 TextViews 的 scroll_to_mark 函数不起作用,这对我的应用程序来说是不可接受的。加入它们后,主文本窗口的滚动速度是行号窗口的两倍,如果我将 ScrolledWindow 的调整设置为 self.textviewer.linenums 的调整,反之亦然。我强烈怀疑这是一个错误。我还尝试自己设置视口并将其调整设置为其中一个 TextView 的调整,但 scroll_to_mark 函数再次停止工作。如何将两个 TextView 同步为一个滚动,以便对其中一个的任何滚动更改同样影响另一个?
编辑:这是我设置小部件的主应用程序中的代码。
self.textviewer = TextViewer.TextViewer(self.toplevel)
sw = gtk.ScrolledWindow()
#These are the lines that toggle between the two problems when (un)commented
sw.set_vadjustment(self.textviewer.mainview.get_vadjustment())
sw.set_hadjustment(self.textviewer.mainview.get_hadjustment())
sw.add_with_viewport(self.textviewer)
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)