wxpython更改图像大小和位置

时间:2019-08-12 14:39:26

标签: python wxpython

我想在界面中添加图片,但是图片太大了,我不知道如何更改大小或位置。

我只能显示图片,但是图片太大,无法覆盖所有内容。所以这是代码:

self.png = wx.StaticBitmap(self, -1, wx.Bitmap("image.png", wx.BITMAP_TYPE_ANY))

1 个答案:

答案 0 :(得分:0)

最快的方法是根据需要使用图像的副本resized
但是,您可以使用wx.Image,它提供选项ScaleRescale以及ResizeRotate等。 例如:

import wx

class TestFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.MaxImageSize = 500
        self.Image = wx.StaticBitmap(self, bitmap=wx.Bitmap(self.MaxImageSize, self.MaxImageSize))
        box = wx.BoxSizer(wx.VERTICAL)
        box.Add(self.Image, 0, wx.ALL, 10)
        self.SetSizer(box)

        Img = wx.Image('image/pia21970-opt.jpg', wx.BITMAP_TYPE_ANY)
# scale the image, keeping ratio
        W = Img.GetWidth()
        H = Img.GetHeight()
        print("Actual image size Width",W,"Height",H)
        if W > H:
            NewW = self.MaxImageSize
            NewH = self.MaxImageSize * H / W
        else:
            NewH = self.MaxImageSize
            NewW = self.MaxImageSize * W / H
        print("New image size Width",NewW,"Height",NewH)
        Img = Img.Scale(NewW,NewH,quality=wx.IMAGE_QUALITY_HIGH)
        self.Image.SetBitmap(wx.Bitmap(Img))
        self.Show()

class App(wx.App):
    def OnInit(self):
        frame = TestFrame(None, -1, "wxBitmap Test")
        return True

if __name__ == "__main__":
    app = App()
    app.MainLoop()

注意:结合缩放图像的功能和一些明智的鼠标滚动,可以提供“缩放”控件。

enter image description here

如果不使用pos=(x,y),则可以使用sizers形式进行定位,否则sizer控制位置,而您控制sizer