2010-08-17 5 views
2

J'ai un GridSizer contenant des images StaticBitmap. Je veux placer chacune des images dans leurs propres panneaux afin que je puisse changer la couleur de fond pour mettre en évidence une image si elle a été choisie. Lorsque j'essaie de faire cela, cependant, les images ne sont pas centrées dans leurs panneaux et la couleur d'arrière-plan en surbrillance n'est présente que sur deux bordures. Comment puis-je faire les images au centre de leurs panneaux afin qu'il y ait une bordure équivalente autour de chacun des côtés?wxPython: centrer une image dans un panneau

sizer = wx.GridSizer(rows=row,cols=cols,vgap=5) 
for fn in filenames: 
    p = wx.Panel(self.panel) 
    img = wx.Image(fn, wx.BITMAP_TYPE_ANY) 
    img2 = wx.StaticBitmap(p, wx.ID_ANY, wx.BitmapFromImage(img)) 
    img2.Bind(wx.EVT_LEFT_DOWN, self.OnClick, img2) 
    sizer.Add(p) 
self.panel.SetSizer(sizer) 

Répondre

5

Vous devez ajouter votre image à un boxSizer avec une bordure. Vous pouvez écrire une classe imagePanel pour l'implémenter.

Vous devriez alors pouvoir appeler SetBackgroundColour sur votre ImgPanels pour changer la couleur des bordures (panneaux) quand vous en avez besoin.

est ici un très exemple rugueux pour une ImgPanel classe

class ImgPanel(wx.Panel): 
    def __init__(self, parent, image): 
     wx.Panel.__init__(self, parent) 

     img = wx.Image(image, wx.BITMAP_TYPE_ANY) 
     self.sBmp = wx.StaticBitmap(self, wx.ID_ANY, wx.BitmapFromImage(img)) 

     sizer = wx.BoxSizer() 
     sizer.Add(item=self.sBmp, proportion=0, flag=wx.ALL, border=10) 
     self.SetBackgroundColour('green') 
     self.SetSizerAndFit(sizer) 
Questions connexes