ボタンを押すと特定のプログラムを実行し、実行している間プログレスバーを表示する(その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"を見てもどうやるのかよくわからない。