00001
00002 '''
00003 An external event looper for nuwa.py that provides a GUI.
00004 '''
00005
00006 from Tkinter import *
00007
00008 class Main(Frame):
00009 def __init__(self,app,master=None):
00010 Frame.__init__(self,master)
00011 self.app = app
00012 self.pack()
00013 self.createWidgets()
00014 self._canvas = None
00015 self._histogram = None
00016 from DybPython.Control import nuwa
00017 self._nevents = nuwa.opts.executions
00018 return
00019
00020 def createWidgets(self):
00021 b = Button(self)
00022 b['text'] = 'Quit'
00023 b['fg'] = 'red'
00024 b['command'] = self.quit
00025 b.pack({'side':'left'})
00026 self.b_quit = b
00027
00028 b = Button(self)
00029 b['text'] = 'Next'
00030 b['command'] = self.next
00031 b.pack({'side':'left'})
00032 self.b_next = b
00033
00034 b = Button(self)
00035 b['text'] = 'Hist'
00036 b['command'] = self.hist
00037 b.pack({'side':'left'})
00038 self.b_hist = b
00039
00040 return
00041
00042 def hist(self):
00043 import ROOT
00044 if not self._canvas:
00045 self._canvas = ROOT.TCanvas('canvas','gaussian')
00046 self._histogram = ROOT.TH1D("gaussian","gaussian",200,-10,10)
00047 self._histogram.Draw()
00048
00049 pass
00050 self._histogram.FillRandom("gaus")
00051 self._canvas.Modified()
00052 self._canvas.Update()
00053 return
00054
00055
00056 def drain(self):
00057
00058 self.app.drain_queue()
00059 self.after(100, self.drain)
00060 return
00061
00062 def _next_cb(self,res):
00063 print 'Next event loaded'
00064 if res: print 'Result: %s'%str(res)
00065 return
00066
00067 def next(self):
00068 if not self._nevents:
00069 self.app.shutdown()
00070 self.quit()
00071 self._nevents -= 1
00072 self.app.run(self._next_cb,1)
00073 return
00074
00075 pass
00076
00077 def start(app):
00078 import async
00079 tkroot = Tk()
00080 tkapp = Main(async.AsyncInterface(app),master=tkroot)
00081 tkapp.after(0, tkapp.drain)
00082 tkapp.mainloop()
00083 tkroot.destroy()
00084
00085
00086
00087