gpt4 book ai didi

c# - 两个具有共享滚动条的 Gtk TextView 小部件

转载 作者:行者123 更新时间:2023-11-30 18:41:40 30 4
gpt4 key购买 nike

我想要并排放置两个 TextView 小部件,它们与单个滚动条一起滚动。

我可以将两个 TextView 小部件放在一个 Hbox 中,然后将它们添加到一个 Viewport,然后再添加到一个 ScrolledWindow。但是,这不会像我想要的那样工作。从滚动条滚动将起作用。但是 TextView 中发生的 Action 不会改变滚动位置。 (箭头键、向上翻页、向下翻页等)而且我也无法以编程方式使用 TextView.ScrollToMark 和其他 TextView 滚动方法更改滚动。

如何让两个 TextView 小部件共享一个滚动条并在 TextView 更新滚动时执行操作?

最佳答案

关键是使用 ScrolledWindow 而不是 Viewport,并在 ScrolledWindows 之间共享调整。视口(viewport)只会滚动到一个太大而无法放入容器的小部件。另一方面,ScrolledWindow 将其调整链接到受光标移动影响的 TextView 调整。

我通过链接 ScrolledWindows 之间的调整,隐藏它们的滚动条,然后将它们放在一个大的 ScrolledWindow 中,只控制所有子窗口滚动条(未显示),设法使它起作用。

以下是 Python 中的完整代码解决方案。您应该能够轻松地将其适应 C#。

#!/usr/bin/python

import pygtk
pygtk.require('2.0')
import gtk

if __name__ == "__main__":
window = gtk.Window()

box = gtk.HBox()

textview1 = gtk.TextView()
textview2 = gtk.TextView()

hadjustment = None
vadjustment = None

for textview in (textview1, textview2):
sw = gtk.ScrolledWindow()
# don't show the scrollbars on these sub-scrolledwindows
sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
sw.add(textview)

# use the first scrolledwindow's adjustments
if hadjustment is None:
hadjustment = sw.get_hadjustment()
else:
sw.set_hadjustment(hadjustment)
if vadjustment is None:
vadjustment = sw.get_vadjustment()
else:
sw.set_vadjustment(vadjustment)

box.pack_start(sw, padding=5)

buffer = textview.get_buffer()
buffer.set_text("If a widget has native scrolling abilities,\n"
" it can be added to the gtk.ScrolledWindow\n"
"with the gtk.Container.add() method. If a\n"
"widget does not, you must first add the\n"
"widget to a gtk.Viewport, then add the\n"
"gtk.Viewport to the scrolled window. The\n"
"convenience method add_with_viewport() does\n"
"exactly this, so you can ignore the presence\n"
"of the viewport.")

# this scrolled window will encompass the rest and have scrollbars
main_sw = gtk.ScrolledWindow(hadjustment, vadjustment)
main_sw.set_policy(gtk.POLICY_ALWAYS, gtk.POLICY_ALWAYS)
main_sw.add(box)
window.add(main_sw)

window.show_all()
gtk.main()

关于c# - 两个具有共享滚动条的 Gtk TextView 小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6617816/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com