非常大的wx.ScrolledPanel渲染

时间:2013-05-04 01:24:14

标签: wxpython

我正在尝试在可滚动窗口中显示非常大的地图。这个想法是你有一个方形瓷砖网格,每个瓷砖都有一个图像,你可以滚动来查看它们。每个图块也有一些数字信息(我可以使用wx.StaticText绘制它),您可以单击并右键单击图块以执行某些操作。

我的第一步是为每个图块使用wx.Panel,为地图使用wx.ScrolledWindow。但是,wx.ScrolledWindow在使用大量磁贴时效果非常差(滚动速度约为4fps)。

我的下一次尝试是使用一个flyweight pattern,正好有9个大面板,每个面板使用wx.dc渲染大约100个图块。当用户向一个方向滚动并且面板离开屏幕时,我将它们添加到死池并从死池重新配置新面板。然而,这似乎也没有特别好,因为每当面板重新定位时都会有明显的闪烁。此外,似乎wx.ScrolledWindow中的面板根据当前滚动位置而不是虚拟空间的原点定位(例如panel.SetPosition(...)),这使得难以避免竞争条件,因为滚动位置可能在面板仍在重新配置时更改。

在wxPython中渲染非常大的滚动内容的推荐模式是什么?我熟悉在我的原生WM中实现这一点的方法,并且我已经看到在wxWidgets中实现了fairly large scroll areas。但似乎没有任何关于wxPython的大型滚动内容的例子。

1 个答案:

答案 0 :(得分:0)

显然滚动大型内容的更好方法是使用wx.lib.floatcanvas。有一个合理的演示on GitHub。它不是原生速度,但即使在大图形尺寸上也可以使用。

我还没有想出如何进行本机滚动条(在Mac上)支持的2D多点触控平移,因为它似乎没有出现在MouseWheel事件中。如果它对某人的用例很重要,那可能是一个缺点,但对我的项目来说,这不是世界末日。