切片 wxPython WindowList

Slicing a wxPython WindowList

在 GUI 中,我使用 wx.Treebook 填充了许多 wx.lib.agw.ultimatelistctrl(ULC)。

我需要遍历 treebook 页面(a.k.a。ULC)。
我使用 lPages = treebook.GetChildren() 来获取它们。

但是,树状簿的第一个 children 是 wx.TreeCtrl 的一个实例。

我知道我可以用类似的东西来避免它:

for page in lPages:
    if not isinstance( page, wx.TreeCtrl ):
        # do something with the ULCs

但我想让我的代码简单易读。因此,不要将测试用于单次使用并保留额外的缩进。
我想做类似 lPages = treebook.GetChildren()[1:]del lPages[0] 的事情来只获取 ULC。

它给我以下错误:

使用treebook.GetChildren()[1:]

TypeError: WindowList.__getitem__(): argument 1 has unexpected type 'slice'
Segmentation fault (core dumped)

使用del lPages[0]

TypeError: 'WindowList' object doesn't support item deletion
Segmentation fault (core dumped)

有什么方法可以对 WindowList 进行切片吗?

GetChildren 返回的对象不是实际的 Python 列表,而是模仿列表某些行为的 C++ 对象。您可以使用 list() 将其转换为真实列表,如下所示:

lPages = list(treebook.GetChildren())

然后您可以对该列表对象进行切片或任何您需要的操作。请注意,更改 lPages 的顺序或从 lPages 中删除项目不会影响 window 的实际子项。将其转换为 list() 后,这只是原始集合的副本。