wxPython 添加大量图片到 wx.ScrolledWindow

wxPython Add a lot of images into wx.ScrolledWindow

我正在尝试将大约 1,500 个位图添加到 GridSizer 内的 ScrolledWindow。它们加载成功(但有点慢)。

我的问题是:每当我滚动得更快一点时,整个内容就会冻结 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) 

有没有办法避免滚动后的大延迟?

谢谢!

有几个选项。您可以加载在屏幕上可以看到的图像数量,然后在用户滚动时加载更多图像。这可能会很好用。如果您不希望用户看到它们正在加载,则加载两个值得的页面并仅在滚动事件上加载。

另一个要考虑的选项是在文件夹中创建图像的缩略图并显示它们。这应该会加载得更快并且可能会解决冻结问题。

想到的另一个选择是使用不同的小部件,例如 wx.lib.imagebrowser,它就是为这类事情而制作的。