我正在尝试在GridSizer内向ScrolledWindow添加约1,500个位图。它们已成功加载(但速度较慢)。
我的问题是:每当我滚动更快一点,整个过程就会冻结8-10秒。
以下是相关代码:
class EmojiDBTab(wx.ScrolledWindow):
def __init__(self, parent):
wx.ScrolledWindow.__init__(self, parent)
self.SetScrollbars(1, 10, 1, 10)
dbtab_sizer = wx.GridSizer(len(TEST_UNICODE_EMOJI) / 10 + 1, 10, 0, 0)
for unicode in TEST_UNICODE_EMOJI:
emoji_symbol = EmojiBitmap(wx.Bitmap(unicode_to_pngfilename(unicode)),
TEST_UNICODE_EMOJI[unicode])
dbtab_sizer.Add(wx.StaticBitmap(self, -1, emoji_symbol.bitmap))
self.SetSizer(dbtab_sizer)
有没有办法避免滚动后的大延迟?
谢谢!
答案 0 :(得分:1)
有两种选择。您可以加载屏幕上可以看到的图像数量,然后在用户滚动时加载更多图像。这可能会很好地工作。如果您不希望用户看到正在加载的内容,则可以加载两个页面,仅在滚动事件上加载即可。
要考虑的另一个选项是在文件夹中创建图像的缩略图,然后显示它们。这样应该加载得更快,并且可以解决冻结问题。
想到的另一种选择是使用其他的小部件,例如wx.lib.imagebrowser
,它是为这种事情而制作的。