リンク

2017年1月3日火曜日

pythonでGUIツールを作る ~ 画像のリサイズ ~

wxPythonでGUIツールを作る際、wx.BitmapButtonなどを使用するとき画像サイズとボタンサイズが合わず、小さいorはみ出してしまうといった場合があります。

今回は画像サイズをウィジットに合わせるようリサイズする方法をご紹介します。

今回はこの画像を使用します。

# -*- coding: UTF-8 -*-

import wx

def scale_bitmap(bitmap, width, height):
    """ 画像のリサイズ """
    image = wx.ImageFromBitmap(bitmap)
    image = image.Scale(width, height, wx.IMAGE_QUALITY_HIGH)
    result = wx.BitmapFromImage(image)
    return result


class App(wx.Frame):
    """ GUI """
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(300, 300), style=wx.DEFAULT_FRAME_STYLE)

        p = wx.Panel(self, wx.ID_ANY)

        # 画像表示(リサイズなし)
        bitmap = wx.BitmapButton(p, wx.ID_ANY, wx.Bitmap("python.png"), size=(100, 100), style=wx.SIMPLE_BORDER)

        # 画像表示(リサイズあり)
        image = wx.Bitmap("python.png")
        convert_image = scale_bitmap(image, 100, 100)
        bitmap2 = wx.BitmapButton(p, wx.ID_ANY, convert_image, size=(100, 100), style=wx.SIMPLE_BORDER)

        # レイアウト
        layout = wx.BoxSizer(wx.HORIZONTAL)
        layout.Add(bitmap)
        layout.Add(wx.Size(20, 0))
        layout.Add(bitmap2)

        p.SetSizer(layout)

        self.Show()

app = wx.App()
App(None, -1, 'タイトル')
app.MainLoop()
<結果>

上記スクリプト内で、過去に解説した内容については省略致します。
ご確認いただきたい場合は、pythonでGUIツールを作る ~基礎編~をご覧ください。

続いて解説を行います。

- - - 詳細 - - - - - - - - - - - - -
サンプルではwx.BitmapButtonが2つ並んでいます。

一方は画像をそのまま読み込み&設置したもので、ボタンサイズと画像サイズが合っていないため、はみ出した状態で表示されてしまています。

もう一方は画像のリサイズ関数scale_bimapを呼び出し、リサイズを行った上で設置しているため、期待通りの状態で表示されています。
convert_image = scale_bitmap(image, 100, 100)
この一文がリサイズ関数を呼び出している部分です。
もちろん、数値の部分を変更すれば、任意のサイズに調整することができます。

wx.BitmapButton以外のウィジット(wx.StaticBitmapなど)でも使用することができますので、覚えておいて損はないと思います。

0 件のコメント:

コメントを投稿