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

2024-03-14

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

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

如何让两个 TextView 小部件共享滚动条并在 TextView 中更新滚动条?


关键是使用 ScrolledWindow 而不是 Viewport,并在 ScrolledWindows 之间共享调整。视口只会滚动到太大而无法放入容器的小部件上。另一方面,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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个具有共享滚动条的 Gtk TextView 小部件 的相关文章

随机推荐

  • 添加 BouncyCastle 提供程序会破坏 KeyStore.load()

    我使用以下命令生成了密钥库 keytool genkeypair keystore test ks storetype pkcs12 然后我运行以下测试 base64 代表我创建的密钥库 private static final Strin
  • 实例关闭时的 Spring Cloud Gateway 500

    我有一个使用Spring Cloud Load Balancer Spring Cloud版本 Hoxton SR6 的Spring Cloud Gateway eureka客户端 应用程序 并且我有一个Spring Boot应用程序的实例
  • std::to_string 线程安全吗?

    我正在寻找使用将整数类型转换为字符串std to string http en cppreference com w cpp string basic string to string 但我看到了这一段 std to string依靠std
  • 将中文文档拆分成句子[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我必须将中文文本分成多个句子 我尝试了斯坦福文档预处理器 它对于英语来说效果很好 但对于中文则不然 请
  • Java 说 FileNotFoundException 但文件存在

    我的计算机科学课程有一项作业 其中要求读取包含多个测试分数的文件 并要求我对它们进行求和并求平均值 虽然求和和求平均值很容易 但我在读取文件时遇到问题 老师说使用这个语法 Scanner scores new Scanner new Fil
  • 使用 POST 发送数据到 JSONP 请求

    概括 想要使用 POST 方法将数据发送到另一个域 JSONP Code http jsonp scope baseApiUrl QueryBuilder getData callback JSON CALLBACK success fun
  • 我可以在 MSBuild 文件中执行循环吗?

    目前 我让他遵循以下代码MSBuild项目文件 这真的很简单 定义4变量并为每个变量调用一次我的 MSBuild 任务 求代码
  • 画布默认尺寸

    Chrome 似乎将画布标签的默认宽度设置为 300px 当我希望画布默认为其包含的 div 的大小 其大小未指定 时 这有点麻烦 使用示例here http jsfiddle net ecTCD 1 我希望画布默认为标题的宽度并添加填充
  • string.GetHashCode() 唯一性和冲突

    给定两个不同的字符串 情况是否总是这样s GetHashCode s1 GetHashCode 是否存在不同整数的数量小于不同字符串的数量 No Just as a simple thought experiment How many st
  • 在 Openshift 上使用 node-gyp 构建模块

    当尝试在 Openshift 上构建需要 Node gyp 的模块 如 Node canvas 时 我收到此错误 gt email protected cdn cgi l email protection install var lib r
  • 在 PySpark 中将 StringType 转换为 ArrayType

    我正在尝试在我的数据集上运行 PySpark 中的 FPGrowth 算法 from pyspark ml fpm import FPGrowth fpGrowth FPGrowth itemsCol name minSupport 0 5
  • 将重音字符转换为 ascii 字符

    从 1600 万个字符串变量的向量中删除德语 或法语 口音的最佳方法是什么 例如 干燥综合征 变为 干燥综合征 将单个字符转换为单个字符比音译更好 例如 gt ae gt oe gt ue 例如 使用正则表达式是一种选择 但有更好的选择吗
  • Rails - 验证关联的存在?

    我有一个模型 A 它与另一个模型 B 具有 has many 关联 我有一个业务要求 即插入 A 需要至少 1 个与 B 相关的记录 是否有我可以调用的方法来确保这是真的 或者我需要编写自定义验证吗 您可以使用validates prese
  • PHP rename() 不会在错误时抛出异常

    我正在使用 php 应用程序 并且有一行移动文件 我将该方法包含在 try catch 块中 这样 如果抛出错误 可以管理回滚系统 但异常永远不会被捕获 那么 重命名会抛出任何类型的异常吗 我需要尝试其他方法吗 Thanks 上面的代码 t
  • Pyplot - 反转 Y 标签而不反转条形图

    我有一个使用seaborn的因子图 import seaborn as sns sns set style white sns set context paper g sns factorplot x Ligand y KD col Ana
  • jqGrid警告请选择行位置

    有没有办法将对话框消息 请选择行 定位在所选网格的左上角 我只想在警报警告中具有相同的行为 就像编辑和删除表单一样 这个主题解决方案对我不起作用 AlertMod警告消息的JQGrid位置 https stackoverflow com q
  • 在 POST Django 上加密密码

    除了使用 SSL 之外 还有什么方法可以在第一次 POST 到服务器时在 Django 框架中加密密码 例如 如果我有一个接受用户名和密码的表单 然后将其发送到另一个视图 那么发送到后端的密码不是未加密的吗 如果是这样 有没有办法在传输到后
  • 为 testProbe 提供 ActorPath

    我有一些代码使用 ActorPath 而不是 ActorRef 向演员发送消息 system actorSelection user myActor a message 我需要确保这条消息确实被发送了 因此 我需要在测试中创建一个位于此 a
  • 如何从 localhost 向我的 docker 容器发送 HTTP 请求?

    我在向 Docker 容器 它是与 Redis 数据库通信的 Node js API 发出 HTTP 请求时遇到问题 该容器在 VM Docker Toolbox 内运行 我已经使用所需的端口设置了 Dockerfile 和 docker
  • 两个具有共享滚动条的 Gtk TextView 小部件

    我想要两个并排的 TextView 小部件 它们与单个滚动条一起滚动 我可以将两个 TextView 小部件放入 Hbox 然后将它们添加到 Viewport 然后添加到 ScrolledWindow 然而 这不会按我想要的方式工作 从滚动