私の wxPython プロジェクトには、複数のネストされたサイザーを持つフレームがあります。
sizer の 1 つには、ファイルから読み取ったビットマップを含む wxStaticImage が含まれています。
フレームのサイズが変更されるたびに画像のサイズを変更(拡大/縮小)する必要があるため、サイザーの境界に収まります。
(私はそう思います) 画像のサイズを変更する方法を知っています。私が知らないのは、次の方法です。
- 画像のコンテナの幅または高さを取得する方法は?
- 多分私はそれを自動的に行うプロパティを見落としましたか?
(今のところ、比率は気にしません)
編集:完全なソリューション
wxStaticBitmapin.Size について間違って理解しました。画像のサイズ(つまり、画像の解像度) を記述するのではなく、wxStaticBitmapin.Size はサイザーのスロットの寸法、つまり現在のウィジェットのサイズを示します。
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()