wxPython 画像が切れるときはリサイズかFit()で対応しよう

まくまく
まくまく
人気のGUIライブラリwxPythonで画像を表示してみると、あれ???画像が見切れてます。。。リサイズしたらいけそうかな???



オリジナル


wxPythonで作成したウインドウに画像を表示してみたら、画像全体が表示されなくて切れてしまいました。

#ライブラリのインポート
import wx

class MyFrame(wx.Frame):

    def __init__(self, *args, **kw):
        super(MyFrame, self).__init__(*args, **kw)
        
        self.pnl = wx.Panel(self)

        #テキストを作成
        self.text1 = wx.StaticText(self, label="Image貼り付けテスト")

        #画像を読み込み
        image = wx.Image('img1.jpg')
        
        self.bitmap = image.ConvertToBitmap()        
        self.bitmap2 = wx.StaticBitmap(self,-1, self.bitmap)
       
        #Sizerを作成
        sizer = wx.BoxSizer(orient=wx.VERTICAL)
        #テキストと画像をSizerに追加
        sizer.Add(self.text1, 1) 
        sizer.Add(self.bitmap2, 1)

        #sizerをセット
        self.SetSizer(sizer)

if __name__ == '__main__':
    app = wx.App()
    frm = MyFrame(None, title='wxPythonのテスト')
    frm.Show()
    app.MainLoop()

リサイズする場合


画像をリサイズすることで、全体が表示されました。下のプログラムの16行目「image.Scale」という箇所でリサイズしています。

#ライブラリのインポート
import wx

class MyFrame(wx.Frame):

    def __init__(self, *args, **kw):
        super(MyFrame, self).__init__(*args, **kw)
        
        self.pnl = wx.Panel(self)

        #テキストを作成
        self.text1 = wx.StaticText(self, label="Image貼り付けテスト")

        #画像を読み込み
        image = wx.Image('img1.jpg')
        image = image.Scale(250,182, wx.IMAGE_QUALITY_HIGH)
        self.bitmap = image.ConvertToBitmap()        
        self.bitmap2 = wx.StaticBitmap(self,-1, self.bitmap)
       
        #Sizerを作成
        sizer = wx.BoxSizer(orient=wx.VERTICAL)
        #テキストと画像をSizerに追加
        sizer.Add(self.text1, 1) 
        sizer.Add(self.bitmap2, 1)

        #sizerをセット
        self.SetSizer(sizer)

if __name__ == '__main__':
    app = wx.App()
    frm = MyFrame(None, title='wxPythonのテスト')
    frm.Show()
    app.MainLoop()

ウインドウをフィットさせる場合


次はリサイズではなく、画像を元々のサイズで表示してみました。「self.FIT()」を入れることでウインドウサイズをフィットさせています。

あと、あらかじめウインドウイサイズを固定サイズとして、画像サイズ以上にしておくのも良いかと思います。この方法については別の記事で書きたいと思います。

#ライブラリのインポート
import wx

class MyFrame(wx.Frame):

    def __init__(self, *args, **kw):
        super(MyFrame, self).__init__(*args, **kw)
        
        self.pnl = wx.Panel(self)

        #テキストを作成
        self.text1 = wx.StaticText(self, label="Image貼り付けテスト")

        #画像を読み込み
        image = wx.Image('img1.jpg')
        self.bitmap = image.ConvertToBitmap()        
        self.bitmap2 = wx.StaticBitmap(self,-1, self.bitmap)
       
        #Sizerを作成
        sizer = wx.BoxSizer(orient=wx.VERTICAL)
        #テキストと画像をSizerに追加
        sizer.Add(self.text1, 1) 
        sizer.Add(self.bitmap2, 9)

        #sizerをセット
        self.SetSizer(sizer)
        self.Fit()

if __name__ == '__main__':
    app = wx.App()
    frm = MyFrame(None, title='wxPythonのテスト')
    frm.Show()
    app.MainLoop()
タイトルとURLをコピーしました