首页 > 解决方案 > wxpython 改变图像大小和位置

问题描述

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

我只能显示图片,但图片太大,涵盖了所有内容。所以这里是代码:

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

标签: pythonwxpython

解决方案


最快的方法是resized酌情使用图像的副本。
但是,您可以使用wx.Imagewhich 提供选项ScaleRescalewithResizeRotate。例如:

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()

注意:将缩放图像的能力与一些明智的鼠标滚动相结合可以提供缩放控件。

在此处输入图像描述

pos=(x,y)如果不使用,则可以使用表单来实现定位,sizers否则sizer控制位置并控制sizer.


推荐阅读