2017-11-22 24 views
0

wxpythonでは、sizerとその項目を無効/有効にできないので、sizerをループして1つずつ無効にすることにしました。wxpythonでsizerの要素を無効/有効にする

私のパネルは次のようになります。私の項目が動的に作成されているので、私はどのような要素が内側になりますどのように多くのか分からないので、そのidでそれを行うことはできません

vertical_sizer 
├── horizontal_sizer_1 
│ └── dynamic_created_elements 
└── horizontal_sizer_2 
    └── dynamic_created_elements 

。 だから私はこのコードwrtittenています

for horizontal_sizer in self.my_sizer.GetChildren(): 
    for element in horizontal_sizer.GetChildren(): 
     element.Enable() 

をしかし、私は私のhorizo​​ntal_sizerにエラーAttributeError: 'SizerItem' object has no attribute 'GetChildren'を取得し続けます。

答えて

1

horizontal_sizerの項目にGetWindow()を呼び出し、それを印刷して、それがNoneか期待していないウィジェットであるかどうかを判断してください。私の疑いは、サイザーではない別のウィジェットがあなたの垂直サイザーの内側にあることです。助けのための

for horizontal_sizer in self.my_sizer.GetChildren(): 
    if hasattr(horizontal_sizer, 'GetChildren'): 
     for element in horizontal_sizer.GetChildren(): 
      element.Enable() 
+0

感謝を:

代わりに、あなたはそれをスキップし、子アイテムがメソッドとしてGetChildren()があり、そうでない場合はどうかを判断するために、Pythonのhasattrを使用することができます。何度か再チェックし、あなたが甘やかされたときに 'hasattr'を試しました。プログラムはちょっと複雑なので、私はまだ何かが欠けている可能性があります。だから、私はそれが私のパネルで変更を必要とする要素を格納しているリストを作成して仕事をすることができなかったので。クリーンでないかピジョンソニックな解決策ではなく、適切な修正を得られない 'TODO'リストのもう一つのことです。 –

関連する問題