Dans wxPython, si je crée une liste de boutons radio et que je place la liste initialement, est-il possible de modifier le contenu de cette liste ultérieurement? Par exemple, j'ai un panneau qui utilise un boxSizer pour placer les widgets au départ. Un de ces widgets est une liste de boutons radio (j'ai aussi essayé un radiobox normal). Je voudrais changer dynamiquement la liste basée sur des variables d'une autre classe. Cependant, une fois la liste placée dans le calibreur, elle est effectivement "verrouillée"; Je ne peux pas simplement modifier la liste et faire apparaître les changements. Si j'essaye de rajouter la liste au calibreur, elle sera placée dans le coin supérieur gauche du panneau.Création d'un bouton radio dynamique
Je suis sûr que je pourrais cacher la liste originale et placer manuellement la nouvelle liste dans la même position mais cela ressemble à un kludge. Je suis sûr que je rends cela plus difficile que ça. J'utilise probablement les mauvais widgets pour cela, et encore moins la mauvaise approche, mais je construis cela comme une expérience d'apprentissage.
class Job(wiz.WizardPageSimple):
"""Character's job class."""
def __init__(self, parent, title, attribs):
wiz.WizardPageSimple.__init__(self, parent)
self.next = self.prev = None
self.sizer = makePageTitle(self, title)
self.charAttribs = attribs
#---Create widgets
self.Job_list = ["Aircraft Mechanic", "Vehicle Mechanic", "Electronics Specialist"]
box1_title = wx.StaticBox(self, -1, "")
box1 = wx.StaticBoxSizer(box1_title, wx.VERTICAL)
grid1 = wx.BoxSizer(wx.VERTICAL)
for item in self.Job_list:
radio = wx.RadioButton(self, -1, item)
grid1.Add(radio)
##Debugging
self.btn = wx.Button(self, -1, "click")
self.Bind(wx.EVT_BUTTON, self.eligibleJob, self.btn)
#---Place widgets
self.sizer.Add(self.Job_intro)
self.sizer.Add(self.btn)
box1.Add(grid1)
self.sizer.Add(box1)
def eligibleJob(self, event):
"""Determine which Jobs a character is eligible for."""
if self.charAttribs.intelligence >= 12:
skillList = ["Analyst", "Interrogator", "Fire Specialist", "Aircraft Pilot"]
for skill in skillList:
self.Job_list.append(skill)
print self.Job_list ##Debugging
#return self.Job_list