切片 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()
后,这只是原始集合的副本。
在 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()
后,这只是原始集合的副本。