2008年5月2日金曜日

ProgressDialog(その6)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
対策。たいしたコードではないが一応参考までに。
panelでspacingしているすさまじくだるいコードですが。

class ProgressFrame(wx.Frame):
'''
Unlike Progress Dialog, it DOES NOT Yield.
So, it can be destroyed safely on Event from other thread.
'''
def __init__(self, parent, title, message, maximum):
assert(parent)
wx.Frame.__init__(self, parent, -1, title)

self.disabler = wx.WindowDisabler(self)


sizer = wx.BoxSizer(wx.VERTICAL)

# FIXME
# How to add edge in BoxSizer?
blank = wx.Panel(self, size=(100, 5))
sizer.Add(blank, 0, flag=wx.ALIGN_CENTER)

self.gauge = wx.Gauge(self, range=maximum)
sizer.Add(self.gauge, 0, flag=wx.ALIGN_CENTER)

blank = wx.Panel(self, size=(100, 5))
sizer.Add(blank, 0, flag=wx.ALIGN_CENTER)

self.text = wx.StaticText(self, label=message)
sizer.Add(self.text, 0, flag=wx.ALIGN_CENTER)

blank = wx.Panel(self, size=(100, 5))
sizer.Add(blank, 0, flag=wx.ALIGN_CENTER)

abort = wx.Button(self, -1, 'Abort')
self.Bind(wx.EVT_BUTTON, self.OnAbort, abort)
sizer.Add(abort, 0 , flag=wx.ALIGN_CENTER)

blank = wx.Panel(self, size=(100, 5))
sizer.Add(blank, 0, flag=wx.ALIGN_CENTER)

self.SetSizer(sizer)
sizer.Fit(self)
sizer.SetSizeHints(self)

def Update(self, new_count):
self.gauge.SetValue(new_count)

def Pulse(self):
self.gauge.Pulse()

def OnAbort(self, evt):
raise



if __name__ == '__main__':
class MyPF(ProgressFrame):
def OnAbort(self, evt):
p = self.GetParent()
p.stop()


class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='frame')
start = wx.Button(self, -1, 'Start')

self.pf = None
self.Bind(wx.EVT_TIMER, self.TimerHandler)
self.Bind(wx.EVT_BUTTON, self.OnButton, start)
self.timer = wx.Timer(self)
self.count = 0
self.Show()

def __del__(self):
sefl.stop()

def start(self):
self.pf = MyPF(self, 'test title', 'test message', 100)
self.timer.Start(100)
self.pf.Show()

def stop(self):
if self.pf:
self.pf.Destroy()
self.pf = None
self.count = 0
self.timer.Stop()

def OnButton(self, evt):
self.start()
def TimerHandler(self, evt):
self.count += 1
if self.pf:
self.pf.Pulse()
if self.count > 50:
self.stop()

app = wx.PySimpleApp()
frame = TestFrame()
app.MainLoop()

0 件のコメント: