【发布时间】:2012-11-22 06:15:11
【问题描述】:
我的 wxPython 项目有一个框架,有多个嵌套的 sizer。
其中一个 sizer 包含一个 wxStaticImage 和一个从文件中读取的位图。
每次调整框架大小时,我都需要调整图像大小(扩大/缩小),这样它就会适合它的尺寸器边界。
(我认为)我知道如何调整图像大小。我不知道如何:
- 如何获取图片容器的宽度或高度?
- 也许我忽略了自动执行此操作的属性?
(现在,我不介意比例)
编辑:完整解决方案
-
我对 wxStaticBitmapin.Size 的理解有误。它没有描述 图像 的大小(即图像分辨率),而是 - wxStaticBitmapin.Size 给出了 sizer 的插槽尺寸,或者换句话说:当前小部件的大小.
所以有了 Mik 的代码,我现在如何适应插槽。
除了 mike 的解决方案:在帧上使用 onSize 事件时,不要忘记添加 event.skip()。否则,sizer 将停止重新对齐。或者,只需使用图像的 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()
【问题讨论】:
-
我想知道现在有实现这个的派生类。我认为这个用例并不少见。
-
这些公式对我来说看起来不正确。您的 NewW 和 NewH 最终都具有相同的值(H、W 中的较大者)并定义了一个方形图像。例如公式 W*H/W 会以 H 结尾。
-
我真的对 7 年前的代码一无所知——但是——在我看来,它是某种语法糖。 (我在四年级之后很好地编写了这段代码,所以这不是对基本数学的无知。我希望。)。顺便说一句,如果你在 2020 年来到这里,那是否意味着这个功能还没有内置 wx?