2010-12-03 7 views
1

hé :) ok je cherche un moyen de créer un grand nombre de panneaux dans wxpython et de leur ajouter une liste dans une liste, mais je ne suis pas sûr de la meilleure façon de le faire. par exemple pour i dans la liste: wx.Panel (auto, -1, pos, taille) #create le panneauwxpython contrôlant un widget avec l'ID

stocker en quelque sorte une prise à elle par exemple

anotherlist.append (a) un #where est la prise au panneau quand je dis hold je veux dire dire que le nom de la variable est x, donc x = wx.Panel. J'appellerais x le hold cos x peut être utilisé pour toute manipulation du widget, par exemple x.SetPosition etc. Je pensais peut-être utiliser un class class (wx.Panel) qui crée le panneau et enregistre l'identifiant du panneau. Le problème est d'avoir l'ID je n'ai aucune idée de la façon d'accéder au widget. dire que l'ID des panneaux est -206. Comment puis-je faire quelque chose comme widgetid (-206) .SetBackgroundColour (« RED »)

Répondre

3

Certaines personnes résolvent ce genre de choses en créant des ids au début du fichier:

panelOneId = wx.NewId() 
panelTwoId = wx.NewId() 

Et puis faire quelque chose comme myPanel = wx.FindWindowById (panelOneId). Bien sûr, si vous faites tout ce que vous est la définition des attributs du panneau, il pourrait juste vous pour créer une appartiendrait méthode d'aide comme ceci:

#---------------------------------------------------------------------- 
def createPanel(self, sizer, id, bg): 
    """""" 
    panel = wx.Panel(self, id=id) 
    panel.SetBackgroundColour(bg) 
    sizer.Add(panel) 

Vous pourrez également utiliser wx.FindWindowByName, si vous avez donné les panneaux uniques paramètres de nom.

+0

merci beaucoup mike wx.FindWindowById est exactement ce que je cherchais! :) – James

1

Une solution simple est d'utiliser un dictionnaire pour la carte ids aux panneaux

panels = {} 
for i in range(100): 
    id = wx.NewId() 
    panels[id] = wx.Panel(parent, id, ...) 

Vous avez alors accès à la liste des ids (.keys()), une liste des panneaux (.values()) et une application de id panneau.

+0

il semblerait que mike dit tho, que wx.FindWindowById() est fondamentalement le même et vous n'avez pas à créer le dictionnaire de toute façon que wx.FindWindowById (20) retournerait le wx.Panel (self, id = 20) objet ... merci la réponse est certainement utile – James

Questions connexes