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 件のコメント:
コメントを投稿