ボタンを押すと特定のプログラムを実行し、実行している間プログレスバーを表示する(その1)
ボタンを押すと特定のプログラムを実行する、ことは以前できるようにした。今回はそれとともに、プログラム実行中は実行中であることを示すプログレスバーを表示するように機能を追加する。
いきなりすべてを実装するのは(今の自分には)無理なので、"RUN"ボタンを押すとウィンドウが開いてそこでプログレスバーを表示するように、まずはコードを書く。
いつもの如く、デモの中のコードを改造する。
イベントの順序は次の通り。
- ボタンを押すとウィンドウが開く(Frame.pyを参考にした)
- 開いたウィンドウに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"を見てもどうやるのかよくわからない。