Python:使用滚动条创建自己的小部件

Python:使用滚动条创建自己的小部件,python,gtk,custom-controls,scrollbar,pygtk,Python,Gtk,Custom Controls,Scrollbar,Pygtk,我正在开发一个类似X绘图仪的小部件,它可以实时绘制输入数据。 我已经找到了一个解决方案,如果小部件的值太多,因此它们不适合,可以实现沿x轴滚动 我有愚蠢的方法来实现它: 从支持滚动和子窗口小部件的窗口小部件派生,并添加我自己的窗口小部件,同时在实时更新期间使其越来越大:->我需要使用哪一个父窗口小部件,以及如何避免绘制当前不可见的所有内容 以支持滚动条本身的方式修改我的小部件->但是如何修改 绘制/处理我自己的滚动条->worstcase:( 我真的在网上搜索了一些建议或例子,但是没有任何关

我正在开发一个类似X绘图仪的小部件,它可以实时绘制输入数据。 我已经找到了一个解决方案,如果小部件的值太多,因此它们不适合,可以实现沿x轴滚动

我有愚蠢的方法来实现它:

  • 从支持滚动和子窗口小部件的窗口小部件派生,并添加我自己的窗口小部件,同时在实时更新期间使其越来越大:->我需要使用哪一个父窗口小部件,以及如何避免绘制当前不可见的所有内容
  • 以支持滚动条本身的方式修改我的小部件->但是如何修改
  • 绘制/处理我自己的滚动条->worstcase:(
我真的在网上搜索了一些建议或例子,但是没有任何关于如何以一种好的方式“构造”自定义控件(除了绘制一些东西),特别是在交互的情况下。。。
抱歉,我一般来说是GTK的新手:/

GTK中的大多数小部件都有滚动条

如果要滚动整个小部件,必须实现
GtkScrollable
界面。然后,将小部件添加到
gtkscrolledwowdow
中。滚动窗口有滚动条,这些
gtkscrollbar
gtkaadjustments
链接,通过
GtkSc>传递到自定义小部件可滚动
interface
set\u vaadjustment
set\u hadjustment

如果您只想添加一个滚动条并自己控制它的行为,那么您需要在您的小部件中添加一个
GtkScrollbar
,这意味着您也需要将它变成一个容器


GtkScrollable
方法如下,首先实现
vadjustment
hadjustment
设置器和获取器,然后设置
GtkAdjustments
时,设置其下限和上限以及页面大小(一次可以看到多少小部件)。之后,连接其
值更改
信号,以便在拖动滚动条时可以刷新小部件。
GtkScrollable
不检查滚动条,只检查将绑定到滚动条的调整。绘制小部件时,您将获得调整“
属性,以确定我知道滚动条在水平轴和垂直轴上移动了多少。

你能添加一些代码或链接到你正在尝试的内容吗?没有足够的上下文来告诉你在这里要问什么。@ChristianTernus整个代码有点太多了,但我会尝试添加重要的内容:*ownwidget基于gtk.Drawingarea)*放置在应用程序窗口上的VBOX中*仅使用ATM进行绘制,无大小调整请求等。*内部使用CAIRO进行绘图为什么不能使用已经提供所有这些功能的画布库?比如GooCanvas,或者更复杂的东西,杂乱?谢谢,我会看看这个。在我的小部件开始时,我不知道这部分会变得那么棘手;)@gianmt So GooCanvas是C++的,而凌乱是使用OpenGL的。但我尝试创建一个依赖性最小的Python应用程序(sry,将其添加到标题中)。是的,最后我使用了GTKScrolledwindowo,并将我所有的东西添加到其中。这里是一个gtk.fixed布局,因为我喜欢手动计算我的虚拟位置。因此,如果小部件移动到当前视图之外,就会出现滚动条。布莱利安:)