wxPython:在面板中居中放置图像

wxPython:在面板中居中放置图像,python,wxpython,Python,Wxpython,我有一个带有静态位图图像的GridSizer。我想把每个图像都放在它们自己的面板中,这样我就可以改变背景色来突出显示已选中的图像。但是,当我尝试这样做时,图像并没有在面板中居中,高亮显示的背景色只出现在两个边框上。如何使图像位于面板的中心,从而在每个面板的所有侧面都有一个等效的边框 sizer = wx.GridSizer(rows=row,cols=cols,vgap=5) for fn in filenames: p = wx.Panel(self.panel) img =

我有一个带有静态位图图像的GridSizer。我想把每个图像都放在它们自己的面板中,这样我就可以改变背景色来突出显示已选中的图像。但是,当我尝试这样做时,图像并没有在面板中居中,高亮显示的背景色只出现在两个边框上。如何使图像位于面板的中心,从而在每个面板的所有侧面都有一个等效的边框

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)

您需要将图像添加到带有边框的
boxSizer
。 您可以编写一个
imagePanel
类来实现这一点

然后,您应该能够在需要时在
imgpanel
上调用
setbackgroundcolor
,以更改边框(面板)的颜色

下面是一个
ImgPanel
类的非常粗略的示例

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)