2013-05-04 82 views
0

我试图在可滚动窗口中显示非常大的地图。这个想法是,你有一个方形瓷砖的网格与每个瓷砖的图像,你可以滚动来看到它们。每个tile还有一些数字信息(我可以用wx.StaticText绘制这个信息),你可以点击并右键单击这些tile来执行某些操作。非常大的wx.ScrolledPanel渲染

我在此的第一遍是使用wx.Panel为每个tile和wx.ScrolledWindow为地图。然而,wx.ScrolledWindow似乎在大量的tile(大约4fps的卷轴)下性能很差。

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

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

回答

0

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

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