2016-06-23 20 views
0

GUIでは、wx.lib.agw.ultimatelistctrl(ULC)を多く入れたwx.Treebookを使用します。wxPythonのウィンドウリストをスライスする

私はツリーブックのページ(a.k.a.ULC)を走査する必要があります。
私はそれらを得るためにlPages = treebook.GetChildren()を使用します。

ただし、ツリーブックの最初の子はwx.TreeCtrlのインスタンスです。

私はのようなもので、それを避けることができ知っている:

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

しかし、私はシンプルで読みやすい私のコードを維持したいと思います。したがって、1回の使用にテストを使用せず、余分なインデントを保持します。
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をスライスする方法はありますか?

答えて

1

GetChildrenによって返されるオブジェクトは、実際のP​​ythonリストではなく、リストの動作の一部を模倣するC++オブジェクトです。あなたはこのように、list()を使用して、実際のリストに変換することができます:

lPages = list(treebook.GetChildren()) 

次に、あなたがあなたのスライスや何でもあなたがそのリストオブジェクトに必要な操作を行うことができます。 lPagesの順番を変更したり項目を削除しても、実際のウィンドウの子には影響しません。 list()に変換すると、元のコレクションのコピーに過ぎません。

関連する問題