2011-05-26 6 views
1

J'ai un cadre wx où j'ai un certain nombre de cases à cocher. Si souvent, lorsque l'utilisateur change les paramètres dans un menu déroulant (wx.ComboBox), je voudrais effacer toutes les cases à cocher. À l'heure actuelle, j'ai mis en place une méthode qui est appelée lorsqu'un changement dans le ComboBox arrive et il efface chaque case à cocher manuellement, à savoir:Comment parcourir toutes les instances de wx.CheckBox?

def ClearCheckBoxes(self): 
    self.cb_EnableControl.SetValue(0) 
    self.cb_EnableRun.SetValue(0) 
    self.cb_EnablePower.SetValue(0) 
    ... 
    ... 

Bien que je ne dispose que de 10 d'entre eux, ma méthode ClearCheckBoxes serait beaucoup plus propre si elle était quelque chose comme ceci:

def ClearCheckBoxes(self): 
    for CheckBox in self.AllCheckBoxes: 
     CheckBox.SetValue(0) 

aussi, je suppose que je pourrais créer une liste (c.-à-AllCheckBoxes) et ajoutez toutes les cases à la liste que je les crée, et il serait alors seulement une question de itérer à travers la liste. Mais le point ici est que j'aimerais savoir s'il y avait une façon prédéfinie de le faire.

Merci

Répondre

0

Avez-vous essayé quelque chose comme super laid:

[checkbox.SetValue(0) for checkbox in dir(self) where type(checkbox) == type(wx.Checkbox)] 
5
for control in self.GetChildren(): 
    if isinstance(control, wx.CheckBox): 
     control.SetValue(False) 
+0

Merci @lacks. J'ai essayé ce que vous avez mentionné ci-dessus mais obtenez l'erreur suivante: 'TypeError: objet 'WindowList' n'est pas appelable' sur l'appel self.Children() – jairo

+0

Avez-vous cela fonctionne? Si non, qu'est-ce que le soi? – Iacks

Questions connexes