wxPython:如何自动调整静态图片(StaticBitmap)的大小以适应容器大小

5

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

其中一个大小调整器包含一个从文件读取的位图的wxStaticImage。

我需要图像随着框架的调整而重新调整大小(增长/缩小),以适应其大小调整器的边界。

(我认为)我知道如何调整图像的大小。我不知道如何:

  • 获取图像容器的宽度或高度?
  • 可能我忽略了可以自动做到这一点的属性?

(目前,我不介意比例)

编辑:完整解决方案

  1. 我对wxStaticBitmapin.Size的理解是错误的。它并不描述图像的大小(即图像分辨率),而是描述wxStaticBitmapin.Size给出大小调整器槽口的尺寸,换句话说:当前小部件的大小。

    所以,使用Mik的代码,我现在知道如何适应槽口。

  2. 除了Mik的解决方案之外:当在框架上使用onSize事件时,请勿忘记添加event.skip()。否则,大小调整器将停止重新对齐。或者,只需使用图像的onSize。

以下是完整的事件方法:

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

我想知道现在是否有派生类实现了这个。我认为这种用例并不那么不寻常。 - buhtz
这些公式看起来对我来说不正确。你的NewW和NewH最终都会得到相同的值(即H,W中较大的值),并定义一个正方形图像。例如,公式W*H/W最终只会得到H。 - RufusVS
我真的对7年前的代码一无所知——但是——在我看来,它似乎是某种语法糖。 (我写这段代码时已经过了四年级,所以不是基本数学的无知。我希望如此。)顺便说一句,如果你在2020年来到这里,那么这个功能是否仍未内置于wx中? - Berry Tsakala
1个回答

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接