リンク

2017年1月4日水曜日

pythonでGUIツールを作る ~ ドラッグ&ドロップ ~

今回はwxPythonを使用したGUIツールにドラッグ&ドロップ(以下D&D)を実装します。

D&Dを実装するのは意外と簡単で、wx.FileDropTargetクラスを使用します。
早速スクリプトを見ていきます。
# -*- coding: UTF-8 -*-

import wx

class FileDropTarget(wx.FileDropTarget):
    """ Drag & Drop Class """
    def __init__(self, window):
        wx.FileDropTarget.__init__(self)
        self.window = window

    def OnDropFiles(self, x, y, files):
        self.window.text_entry.SetLabel(files[0])

        return 0


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

        # パネル
        p = wx.Panel(self, wx.ID_ANY)

        label = wx.StaticText(p, wx.ID_ANY, 'ここにファイルをドロップしてください', style=wx.SIMPLE_BORDER | wx.TE_CENTER)
        label.SetBackgroundColour("#e0ffff")

        # ドロップ対象の設定
        label.SetDropTarget(FileDropTarget(self))

        # テキスト入力ウィジット
        self.text_entry = wx.TextCtrl(p, wx.ID_ANY)

        # レイアウト
        layout = wx.BoxSizer(wx.VERTICAL)
        layout.Add(label, flag=wx.EXPAND | wx.ALL, border=10, proportion=1)
        layout.Add(self.text_entry, flag=wx.EXPAND | wx.ALL, border=10)
        p.SetSizer(layout)

        self.Show()

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

<結果> ↓ ↓ ↓

pythonでGUIツールを作る ~ クローズイベント ~

今回はwxPythonで作成したフレームを閉じる(≒アプリを終了する)際に何らかの処理を行いたい場合の記述方法をご紹介します。
# -*- coding: UTF-8 -*-

import wx


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)

        # 閉じるイベント
        self.Bind(wx.EVT_CLOSE, self.frame_close)

        # パネル
        p = wx.Panel(self, wx.ID_ANY)

        self.Show()

    def frame_close(self, event):
        """ 閉じたときに発生するイベント """
        wx.MessageBox('イベント発生!', 'title')

        #event.Skip()
        self.Destroy()

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

<結果> ↓ ↓ ↓

2017年1月3日火曜日

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

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

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

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

2017年1月2日月曜日

pythonでGUIツールを作る ~ ポップアップメニュー ~

wxPythonのwx.Menuを使って、右クリックで表示されるポップアップメニューを作成します。

wx.Menuについては別の記事で紹介しておりますのでそちらをご覧ください。
pythonでGUIツールを作る ~ Menubar&Menu メニューバー&メニュー ~
# -*- coding: utf-8 -*-

import wx


def rclick(event):
    """ 右クリックイベント """
    frame.PopupMenu(menu_file)


def menu_select(event):
    """ メニュー選択イベント """
    id = event.GetId()

    if id == 1:
        print('開く')
    elif id == 2:
        print('保存')
    elif id == 3:
        print('削除')
    else:
        print('終了')


application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "テストフレーム", size=(300,200))

panel = wx.Panel(frame, wx.ID_ANY)

label = wx.StaticText(panel, wx.ID_ANY, '右クリックでメニューを表示します', pos=(20, 30))

# メニュー
menu_file = wx.Menu()

item_1 = wx.MenuItem(menu_file, 1, '開く')
item_2 = wx.MenuItem(menu_file, 2, '保存')
item_3 = wx.MenuItem(menu_file, 3, '削除')
item_4 = wx.MenuItem(menu_file, 4, '終了')

menu_file.Append(item_1)
menu_file.Append(item_2)
menu_file.Append(item_3)
menu_file.Append(item_4)

# メニューアイテム選択イベント
menu_file.Bind(wx.EVT_MENU, menu_select)

# パネル上で右クリックしたときのイベント
panel.Bind(wx.EVT_RIGHT_DOWN, rclick)

frame.Show()
application.MainLoop()

<結果>

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

続いて解説を行います。