リンク

2017年1月4日水曜日

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()

<結果> ↓ ↓ ↓



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

続いて解説を行います。

- - - 詳細 - - - - - - - - - - - - -
self.Bind(wx.EVT_CLOSE, self.frame_close) この記述で、フレームにクローズイベントを設定しています。

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

        #event.Skip()
        self.Destroy()
この部分が閉じたときに処理したい内容です。
今回の例ではメッセージボックスを表示させるようにしています。

ここで注意点ですが、クローズイベントを設定した際、その処理関数では必ず「フレームの破棄」もしくは「イベントのスキップ」を行わなければなりません。
これをしないと、×ボタンを押してもフレームが表示されたままの状態となってしまい、閉じることができません。
くれぐれもご注意ください。

- - - - - - - - - - - - - - - - - -

私はクローズイベントをよく使用しています。
例えば、設定ファイルと組み合わせて、閉じたときのフレームの位置やチェックボックス・ラジオボックスのチェック状態を取得し、その情報を保存しておく、などです。

みなさん様々なソフトを使用していらっしゃることと思いますが、たまに終了処理が長いものがありますよね?
そういったものはクローズイベントにいろんな処理を組み込んでいるのでしょう。

0 件のコメント:

コメントを投稿