ボタンを押すと特定のプログラムを実行し、実行している間プログレスバーを表示する(その1)

ボタンを押すと特定のプログラムを実行する、ことは以前できるようにした。今回はそれとともに、プログラム実行中は実行中であることを示すプログレスバーを表示するように機能を追加する。
いきなりすべてを実装するのは(今の自分には)無理なので、"RUN"ボタンを押すとウィンドウが開いてそこでプログレスバーを表示するように、まずはコードを書く。
いつもの如く、デモの中のコードを改造する。

イベントの順序は次の通り。

  1. ボタンを押すとウィンドウが開く(Frame.pyを参考にした)
  2. 開いたウィンドウにprogress barを表示する(Gauge.pyを参考にした)

たったこれだけ。改造したコードは以下の通り(ファイル名はTextEntryDialog2.py)。でも動作があやしい(写真は実行結果)。

import  wx

class MyFrame(wx.Frame):
    """ based on Frame.py and Gauge.py """
    def __init__(
            self, parent, ID, title, pos=wx.DefaultPosition,
            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE
            ):
        wx.Frame.__init__(self, parent, ID, title, pos, size, style)
        panel = wx.Panel(self, -1)
        
        self.g1 = wx.Gauge(self, -1, 20, (50, 50), (230, 25))
        self.Bind(wx.EVT_TIMER, self.TimerHandler)
        self.timer = wx.Timer(self)
        self.timer.Start(100)

    def TimerHandler(self, event):
        self.g1.Pulse()
   
class TestPanel(wx.Panel):
    """ based on Frame.py """
    def __init__(self, parent, log):
        self.log = log
        wx.Panel.__init__(self, parent, -1)

        b = wx.Button(self, -1, "RUN", (50,50))
        self.Bind(wx.EVT_BUTTON, self.OnButton, b)

    def OnButton(self, evt):
        win = MyFrame(self, -1, "Panel", size=(350, 200),
                      style = wx.DEFAULT_FRAME_STYLE)
        win.Show(True)

#--------------------------------------------------------------
def runTest(frame, nb, log):
    win = TestPanel(nb, log)
    return win

#--------------------------------------------------------------
if __name__ == '__main__':
    import sys,os
    import run
    run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
  • 開いたウィンドウの左上に表示される"□"は何?
  • 背景の色が暗いんだけど変えられないの?
  • あるプログラムの実行が終了したら、このウィンドウを閉じるようにするには?

というわけで、問題山積み。

たぶんウィンドウをwxFrameでわざわざ開かなくても、wxProgressDialogメソッドあたりを指定すれば開いてくれるのでは...、と思ったが、"wxWidgets reference"を見てもどうやるのかよくわからない。

大きな問題は付属リファレンスの見方がわからないこと

ここまで1週間の少しだけの期間、wxPythonの勉強を進めてきたが問題点を洗い出す。

  • いろいろなクラスがあることは分かるが、それらが具体的にどのようなメソッドやイベントを持つのかが分からない。リファレンスで調べても見方がよくわからない。
  • 分かりやすい文献が手元にない。
  • 複数のクラスを組み合わせて使う方法がまだ分からない。
  • デモは動くことは分かるが、それらは単純すぎて自分がやりたいことからはほど遠い。

最大の問題は、文献がないから分からない点を調べられない。
"wxPython in action"のウェブページにサンプルpdfが公開されていた。それを見るとコードの解説はされているが、リファレンスとしては使えるかどうかは疑問であった。買うのは待とう。

1週間やそこらで複雑なコードを書けるほど、腕におぼえがあるわけではないので、現時点で単純なコードしか手が出ないという点は受け入れることにする。これらを踏まえて今週の方針は次のように予定する。

  • 単純なコードを、自分でリファレンスを調べることで構成を理解する。
  • 文献はウェブページやwxPython付属のリファレンスを使う。