GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
status_widget.py
Go to the documentation of this file.
1#!/usr/bin/env python2
2
3from collections import namedtuple
4import Tkinter as tk
5import ttk
6
7import ROOT
8ROOT.PyConfig.IgnoreCommandLineOptions = True
9
10class 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
23class ThreadStatusFrame(ttk.Frame, object):
24 def __init__(self, parent, *options):
25 super(ThreadStatusFrame,self).__init__(parent)
26
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_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)