【问题标题】:Python: Creating own Widget with scrollbarsPython:使用滚动条创建自己的小部件
【发布时间】:2013-10-20 21:28:22
【问题描述】:

我正在开发一个类似 X-plotter 的小部件,它可以实时绘制传入的数据。 我已经搜索了一种解决方案来实现沿 x 轴滚动,如果小部件有很多值并且它们不适合。

我有以下方法来实现它:

  • 从支持滚动和子小部件的小部件派生并添加我自己的小部件,同时在实时更新期间使其越来越大:-> 我需要使用哪个父级以及如何避免绘制所有的东西目前不可见?
  • 修改我的小部件以使其支持滚动条本身 -> 但是如何?
  • 绘制/处理我自己的滚动条 -> 最坏的情况:(

我确实在网上搜索了建议或示例,但是没有关于如何以一种好的方式“构建”自定义控件(除了绘制一些东西)特别是。在交互的情况下... 抱歉,总的来说我是 GTK 的新手:/

【问题讨论】:

  • 您可以添加一些代码或链接到您当前正在尝试的内容吗?没有足够的上下文来说明您在此处询问的内容。
  • @ChristianTernus 整个代码有点多,但我会尝试添加重要的东西: * ownwidget 基于 gtk.Drawingarea) * 放置在应用程序窗口的 VBOX * 仅使用 ATM do_expose 触发绘制,没有尺寸要求等 * 内部使用 CAIRO 绘制
  • 为什么不能使用已经为您提供所有这些的画布库?比如 GooCanvas,或者对于更复杂的东西,Clutter?
  • 谢谢,我会检查一下。在我的小部件开始时我不知道这部分会变得那么棘手;)
  • @giamt 所以 GooCanvas 用于 C++,而 Clutter 使用 OpenGL。但我尝试创建一个依赖最少的 Python 应用程序(对不起,将其添加到标题中)。

标签: python gtk custom-controls scrollbar pygtk


【解决方案1】:

Gtk 中的大多数小部件没有有滚动条。

如果要滚动整个小部件,则必须实现GtkScrollable 接口。然后,将小部件添加到 GtkScrolledWindow。滚动窗口有滚动条,那些GtkScrollbarsGtkAdjustments 链接,它们通过GtkScrollable 接口set_vadjustmentset_hadjustment 传递给您的自定义小部件。

如果您只想添加滚动条并自己控制其行为,那么您需要以某种方式在您的小部件中添加GtkScrollbar,这意味着您也需要将其设为容器。

GtkScrollable 方法如下,首先实现vadjustmenthadjustment setter 和getter,然后在设置GtkAdjustments 时,设置其上下限以及页面大小(多少小部件立即可见)。之后,您连接他们的value-changed 信号,以便在拖动滚动条时刷新您的小部件。 GtkScrollable 不会检查滚动条,只会检查将绑定到滚动条的调整。绘制小部件时,您将获得调整的value 属性,以确定滚动条在水平轴和垂直轴上移动了多少。

【讨论】:

  • 是的,最后我使用了 GTKScrolledWindow 并在里面添加了我所有的东西。这是一个 gtk.fixed 布局,因为我喜欢手动计算我的虚拟位置。因此,如果小部件移出当前视图,则会出现滚动条。辉煌:)
猜你喜欢
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-19
  • 2015-01-10
相关资源
最近更新 更多