wxPython:在面板中居中显示图像

2 投票
1 回答
4426 浏览
提问于 2025-04-16 02:54

我有一个GridSizer,里面放了StaticBitmap图片。我想把每张图片放到自己的面板里,这样我就可以改变背景颜色来突出显示被选中的图片。但是,当我这样做的时候,图片没有在面板中居中,而且高亮的背景颜色只出现在两个边上。我该怎么做才能让每张图片在面板中居中,这样四周的边框看起来是一样的呢?

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)

1 个回答

6

你需要把你的图片放到一个带边框的 boxSizer 里。你可以写一个 imagePanel 类来实现这个功能。

然后,你应该可以在你的 ImgPanels 上调用 SetBackgroundColour,这样就能在需要的时候改变边框(面板)的颜色。

下面是一个 非常 简单的 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)

撰写回答