リンク

2016年8月2日火曜日

pythonでGUIツールを作る ~進捗ダイアログ~

wxPythonでは数々の即席ダイアログが初めから用意されています。

今回ご紹介するのは、時間のかかる処理の進捗状況を表示する「プログレスダイアログ」です。
# -*- coding: utf-8 -*-

import wx
import time

# ボタンのクリックイベント
def click(event):
    # プログレスダイアログ
    dlg = wx.ProgressDialog(u'コピー中(大嘘)', u'0/50ファイル', 50)
    dlg.ShowModal()

    # ループ処理
    for a in range(0, 50):
        # 0.5秒待つ
        time.sleep(0.5)

        # 値の更新
        dlg.Update(a, u'%d/50ファイル' % a)

    dlg.Destroy()


app = wx.App()

frame = wx.Frame(None, wx.ID_ANY, u'タイトル', size=(200, 200))
frame.CreateStatusBar()
p = wx.Panel(frame, wx.ID_ANY)

button = wx.Button(p, wx.ID_ANY, u'開 始')
button.Bind(wx.EVT_BUTTON, click)

frame.Show()
app.MainLoop()

<結果>

続いて詳細を見ていきます。


= = 詳細 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
上記のスクリプトを実行すると、ボタンだけが配置されたシンプルなフレームが表示されます。

そのボタンをクリックすると、今回ご紹介するプログレスダイアログが表示されます。
dlg = wx.ProgressDialog(u'コピー中(大嘘)', u'0/50ファイル', 50)

この記述でプログレスダイアログをインスタンス化しています。
引数は(タイトル、メッセージ、最大値)を指定しています。

さらに、引数にスタイルを追加することで、経過時間・完了予定時間・残り時間を表示することができます。
dlg = wx.ProgressDialog(u'コピー中(大嘘)', u'0/50ファイル', 50, style=wx.PD_ELAPSED_TIME | wx.PD_ESTIMATED_TIME | wx.PD_REMAINING_TIME)
但し、表示は英語のみなのでご注意ください。


dlg.Update(a, u'%d/50ファイル' % a)
Update関数でプログレスバーの値を進めます。
このとき、第1引数でプログレスバーの値を指定し、第2引数でメッセージを指定します。
第2引数は省略することができ、省略した場合、メッセージは変化しません。

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

プログレスダイアログは使い方がシンプルで、気軽に使うことができます。

多くのファイルに処理を行う場合、プログレスダイアログがあれば視覚的・直観的に進捗状況を把握できるので非常に便利です。


0 件のコメント:

コメントを投稿