GRSISort
Created by P.C. Bender
Developement Team: P.C. Bender, R. Dunlop, V. Bildstein
An extension of the ROOT analysis Framework
status_widget.py
Go to the documentation of this file.
1 #!/usr/bin/env python2
2 
3 from collections import namedtuple
4 import Tkinter as tk
5 import ttk
6 
7 import ROOT
8 ROOT.PyConfig.IgnoreCommandLineOptions = True
9 
10 class ThreadVars(object):
11  def __init__(self):
12  self.items_current = tk.DoubleVar()
13  self.items_pushed = tk.DoubleVar()
14  self.items_popped = tk.DoubleVar()
15  self.finished = tk.BooleanVar()
16 
17  def Update(self, thread):
18  self.items_current.set(thread.GetItemsCurrent())
19  self.items_pushed.set(thread.GetItemsPushed())
20  self.items_popped.set(thread.GetItemsPopped())
21  self.finished.set(not thread.IsRunning())
22 
23 class ThreadStatusFrame(ttk.Frame, object):
24  def __init__(self, parent, *options):
25  super(ThreadStatusFrame,self).__init__(parent)
26 
27  self.thread_content = {}
28  self.after_idle(self._PeriodicThreadCheck)
29 
30  def _setup_GUI(self):
31  ttk.Separator(self, orient=tk.HORIZONTAL).grid(row=1, column=0, columnspan=10, sticky='ew')
32  ttk.Separator(self, orient=tk.VERTICAL).grid(column=1,row=0,rowspan=100,sticky='ns')
33  tk.Label(self, text='Output Queue').grid(row=0, column=2)
34  ttk.Separator(self, orient=tk.VERTICAL).grid(column=3,row=0,rowspan=100,sticky='ns')
35  tk.Label(self, text='Items Processed').grid(row=0, column=4)
36  ttk.Separator(self, orient=tk.VERTICAL).grid(column=5,row=0,rowspan=100,sticky='ns')
37  tk.Label(self, text='Finished').grid(row=0, column=6)
38 
40  self._ThreadCheck()
41  self.after(1000, self._PeriodicThreadCheck)
42 
43  def _ThreadCheck(self):
44  threads = ROOT.StoppableThread.GetAll()
45  for thread in threads:
46  name = thread.Name()
47  if name in self.thread_content:
48  var = self.thread_content[name]
49  else:
50  if not self.thread_content:
51  self._setup_GUI()
52 
53  var = ThreadVars()
54  row = len(self.thread_content)+2
55  self.thread_content[name] = var
56 
57  label = tk.Label(self, text=name, justify=tk.LEFT)
58  label.grid(row=row, column=0)
59  progress = ttk.Progressbar(self, variable=var.items_current, maximum=5e4)
60  progress.grid(row=row, column=2)
61  total = tk.Label(self, textvariable=var.items_pushed)
62  total.grid(row=row, column=4)
63  finished = ttk.Checkbutton(self, variable=var.finished, state='disabled')
64  finished.grid(row=row, column=6)
65 
66  var.Update(thread)
def __init__(self, parent, options)