Posted by mlk on Sun 28 Sep 15:36
report abuse | download | new post
- from peak.events.trellis import *
- from peak.events.activity import *
- from time import time
- class Progress(Component):
- started = attr(False)
- started_time = attr(None)
- completed = attr(0)
- @compute
- def time_passed(self):
- if self.started_time:
- bool(Time[0.1])
- return (time() - self.started_time)
- @compute
- def time_remaining(self):
- if self.time_passed and self.completed:
- return self.time_passed * ((1 - self.completed) / self.completed)
- @maintain
- def on_start(self):
- if self.started:
- self.started_time = time()
- ######################################################
- ######################################################
- import wx
- class WxProgressWindow(Component):
- progress = make(Progress)
- def __init__(self):
- self.app = wx.PySimpleApp()
- self.frame = wx.Frame(None)
- self.pbar = wx.Gauge(self.frame, range=1000)
- self.frame.Show()
- @perform
- def on_progress(self):
- self.pbar.Value = 1000 * self.progress.completed
- class WxProgressWindowPlus(WxProgressWindow):
- def __init__(self):
- WxProgressWindow.__init__(self)
- self.text = wx.StaticText(self.frame)
- sz = self.frame.Sizer = wx.BoxSizer(orient=wx.VERTICAL)
- sz.AddWindow(self.pbar, flag=wx.GROW)
- sz.AddWindow(self.text, flag=wx.GROW)
- @perform
- def on_progress_plus(self):
- tp = self.progress.time_passed
- tr = self.progress.time_remaining
- if tp is None:
- txt = "Not started"
- else:
- txt = "Seconds passed: %.1f" % tp
- if tr:
- txt += "; Seconds remaining: %.1f" % tr
- self.text.Label = txt
- self.frame.Layout()
- ######################################################
- ######################################################
- class SteadyIncrease(Component):
- subject = make(int)
- increment = attr(1)
- @task
- def increase(self):
- next = True
- while True:
- while not next:
- yield Pause
- next = Time[1]
- self.subject += self.increment
- ######################################################
- ######################################################
- win = WxProgressWindowPlus()
- win.progress.started = True
- #win.progress.completed = 0.5
- EventLoop <<= WXEventLoop
- autoinc = SteadyIncrease(subject=win.progress.__cells__['completed'], increment=0.1)
- EventLoop.run()
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.