0

我正在尝试在 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) 

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

谢谢!

4

1 回答 1

1

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

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

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

于 2018-10-18T20:23:20.007 回答