5

私の wxPython プロジェクトには、複数のネストされたサイザーを持つフレームがあります。

sizer の 1 つには、ファイルから読み取ったビットマップを含む wxStaticImage が含まれています。

フレームのサイズが変更されるたびに画像のサイズを変更(拡大/縮小)する必要があるため、サイザーの境界に収まります。

(私はそう思います) 画像のサイズを変更する方法を知っています。私が知らないのは、次の方法です。

  • 画像のコンテナの幅または高さを取得する方法は?
  • 多分私はそれを自動的に行うプロパティを見落としましたか?

(今のところ、比率は気にしません)

編集:完全なソリューション

  1. wxStaticBitmapin.Size について間違って理解しました。画像のサイズ(つまり、画像の解像度) を記述するのではなく、wxStaticBitmapin.Size はサイザーのスロットの寸法、つまり現在のウィジェットのサイズを示します。

    Mik のコードを使用して、スロットにどのように収まるかを説明します。

  2. マイクの解決策に加えて、フレームで 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()
4

1 に答える 1

6

EVT_SIZE または EVT_SIZING をキャッチする必要があります。画像ビューアーの作成について私が書いたこのチュートリアルを確認できます。いくつかのスケーリング コードが含まれています: http://www.blog.pythonlibrary.org/2010/03/26/creating-a-simple-photo-viewer-with-wxpython/

そのスケーリング コードを取得し、それを使用して画像を更新するだけです。画像の最大サイズを超えて拡大するのをやめることを確認する必要があります。そうしないと、多くのピクセル化が発生します。

于 2012-12-04T15:49:26.150 に答える