wxpython:自动调整静态图像(staticbitmap)的大小以适应大小

时间:2012-12-04 15:12:51

标签: python wxpython wxwidgets

我的wxPython项目有一个框架,有多个嵌套的大小调整器。

其中一个sizer包含一个wxStaticImage,其中一个位图是从文件中读取的。

每次调整帧大小时,我都需要调整图像大小(增大/缩小),因此它适合它的sizer界限。

(我想)我知道如何调整图像大小。我不知道的内容是:

  • 如何获取图像容器的宽度或高度?
  • 也许我忽视了一个自动完成它的财产?

(现在,我不介意比例)

修改:完整解决方案

  1. 我对wxStaticBitmapin.Size有所了解。它没有描述图像的大小(即图像分辨率),而是 - wxStaticBitmapin.Size给出了 sizer的插槽维度,换句话说:当前小部件的大小

    所以使用Mik的代码我现在如何适应插槽。

  2. 除了迈克的解决方案:在框架上使用onSize事件时,不要忘记添加 event.skip()。否则sizer将停止重新对齐。另外,只需使用图像的onSize。

  3. 这是完整的事件方法:

    def bitmap1_onSize(self, e=None):
        W, H = self.bitmap1.Size
        if W > H:
            NewW = W
            NewH = W * H / W
        else:
            NewH = H
            NewW = H * W / H
        img = wx.Image(self.frame_file_picker.Path, wx.BITMAP_TYPE_ANY)
        img = img.Scale(NewW,NewH)
        self.bitmap1.SetBitmap(wx.BitmapFromImage(img))
        e.Skip()
    

1 个答案:

答案 0 :(得分:6)

您需要捕获EVT_SIZE或EVT_SIZING。你可以查看我写的关于创建图像查看器的教程。它中包含一些缩放代码:http://www.blog.pythonlibrary.org/2010/03/26/creating-a-simple-photo-viewer-with-wxpython/

我只需要使用缩放代码并使用它来更新图像。您需要确保停止将图像缩放到其最大尺寸之外,否则最终会产生大量像素化。