【问题标题】:wxpython: automatically resize a static image (staticbitmap) to fit into sizewxpython:自动调整静态图像(staticbitmap)的大小以适应大小
【发布时间】:2012-11-22 06:15:11
【问题描述】:

我的 wxPython 项目有一个框架,有多个嵌套的 sizer。

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

每次调整框架大小时,我都需要调整图像大小(扩大/缩小),这样它就会适合它的尺寸器边界。

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

  • 如何获取图片容器的宽度或高度?
  • 也许我忽略了自动执行此操作的属性?

(现在,我不介意比例)

编辑:完整解决方案

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

    所以有了 Mik 的代码,我现在如何适应插槽。

  2. 除了 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?

标签: python wxpython wxwidgets


【解决方案1】:

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

我会使用该缩放代码并使用它来更新您的图像。您需要确保停止将图像放大到超过其最大尺寸,否则最终会出现大量像素化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-04
    • 2015-07-16
    • 2014-05-05
    • 2012-09-15
    • 1970-01-01
    • 2020-08-26
    • 2013-06-04
    • 2018-03-03
    相关资源
    最近更新 更多