Python 在Gtk Scrolled窗口中滚动时,我应该捕获哪些信号?

Python 在Gtk Scrolled窗口中滚动时,我应该捕获哪些信号?,python,gtk,pygobject,gio,Python,Gtk,Pygobject,Gio,我正在为Rhythmbox开发一个python插件,其中包含一个GTKScrolledwindoww,还有一个孩子是GtkIconView。IconView由Gtk.TreeModel提供 看起来是这样的: 目前,每个图标都是为树模型中的每一行绘制的,这有点低效,每个图标都是一个文件中的GdkPixbuf。如果您有数千行,可能需要相当长的时间才能使用每个图片图标完全更新整个iconview 我试图实现的是只更新当前绘图区域中的图标-当用户滚动并释放滚动条(或通过键盘导航)时,新绘图区域中的图标

我正在为Rhythmbox开发一个python插件,其中包含一个GTKScrolledwindoww,还有一个孩子是GtkIconView。IconView由Gtk.TreeModel提供

看起来是这样的:

目前,每个图标都是为树模型中的每一行绘制的,这有点低效,每个图标都是一个文件中的GdkPixbuf。如果您有数千行,可能需要相当长的时间才能使用每个图片图标完全更新整个iconview

我试图实现的是只更新当前绘图区域中的图标-当用户滚动并释放滚动条(或通过键盘导航)时,新绘图区域中的图标应使用相关图片进行更新

注意-此时将完全填充树模型-只有图标不会加载

这不是我的专业领域——我正在寻找实现上述目标的最佳方法的指针


具体地说,哪一个Gtk+3绘图区域信号(或多个信号)可以公开(Gtk.scrolled window/Gtk.IconView?)来编写python代码来计算应该更新哪些图标?

但另一方面,如果必须完全向下滚动,则必须等待生成每个页面。所以我猜你最好考虑事件循环的功能。< /P>
这样,您的屏幕就不会锁定,您的电脑也不必等待用户逐个页面加载查看页面。为您和您的应用程序赢得胜利。;-)

您应该分析您的应用程序,以了解需要花费的时间

正在加载图像吗?如果是,那么加载默认图像并将其添加到视图中的任何位置都足够快,因为您只需加载一个图像。然后,根据应显示在视口中的图像,使用按需加载和更新图像

如果需要花费时间将图像添加到模型中,则需要通过检查idle_add回调中视口上的可见内容来按需添加图像

如果两者都很慢,那么您需要混合使用这两种解决方案:按需加载和添加

还可以考虑代理设计模式,该模式有助于创建将在后台加载并包含加载策略的假封面对象

对于信号,您的GtkIconView小部件实现了,它解释了如何执行。您可以通过连接到信号来设置并检查它何时发生了变化。这意味着用户向上或向下滚动,您需要启动一个计时器。如果在短时间超时后(我认为在0.5到1s之间,但需要测试),调整没有改变,这意味着用户停止滚动,您可以更新显示的内容。否则,它将在滚动过程中更新,从而降低速度。然后,您只需了解如何查找视口中显示的项目,以更新其封面

我以前从未做过这件事,但我对GTK有一点了解,我只是想弄清楚怎么做,所以请谨慎阅读。无论如何,反应性的答案是“按需”