Newer
Older
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication, QPushButton
from PyQt5.QtWidgets import QComboBox, QGridLayout, QPlainTextEdit, QLabel, QLineEdit
class Observe(QThread, System):
signal = pyqtSignal('PyQt_PyObject')
def __init__(self):
QThread.__init__(self)
def run(self):
self.p.subscribe("io")
for item in self.p.listen():
self.log.debug("received item: {}".format(item))
std_line = 1
year_line = 1
env_line = 1
add_device_btn_line = 1
self.fullscale_list = [
{"Unit":self.unit, "Display":"SRG" , "Value":2.0},
{"Unit":self.unit, "Display":"0.1mbar" , "Value":10.0},
{"Unit":self.unit, "Display":"0.25mbar", "Value":25.0},
{"Unit":self.unit, "Display":"1mbar" , "Value":100},
{"Unit":self.unit, "Display":"10mbar" , "Value":1000.0},
{"Unit":self.unit, "Display":"100mbar" , "Value":10000.},
{"Unit":self.unit, "Display":"1000mbar", "Value":100000.0},
{"Unit":self.unit, "Display":"0.1Torr" , "Value":13.3},
{"Unit":self.unit, "Display":"1Torr" , "Value":133.0},
{"Unit":self.unit, "Display":"10Torr" , "Value":1330.0},
{"Unit":self.unit, "Display":"100Torr" , "Value":13300.0},
{"Unit":self.unit, "Display":"1000Torr", "Value":133000.0},
]
"fullscale" :1,
"fullscale/10" :0.1,
"fullscale/100" :0.01,
"fullscale/10000" :0.0001,
"fullscale/100000" :0.00001,
self.observer_thread = Observe()
self.observer_thread.signal.connect(self.end_task)
self.observer_thread.start()
self.add_widget_to_grid(self.make_std_combo(),self.std_line, self.std_col)
label_widget = QLabel(str(label_val), self.win)
edit_widget = QLineEdit(str(edit_val), self.win)
edit_widget.textChanged[str].connect(lambda: self.default_change(edit_widget, str(label_val), line))
return label_widget, edit_widget
b.setStyleSheet("background-color: yellow")
b.clicked.connect(self.add_device_line)
return b
def make_std_combo(self):
c = self.make_combo(self.std_select, first_item="select primary standard", last_item=False)
def make_env_combo(self):
c = self.make_combo(self.env_switch, first_item="select env", last_item=False)
c.setFixedSize(self.long_line, self.line_heigth)
c.currentIndexChanged.connect(lambda: self.env_selected(c))
return c
c = self.make_combo(self.year_select, first_item="select calibration year", last_item=False)
def add_widget_to_grid(self, widget, line, col):
#old_widget_item = self.grid.itemAtPosition (line, col)
#old_widget = old_widget_item.widget()
def make_combo(self, item_list, first_item=True, last_item=True):
if isinstance(first_item, bool):
c.addItem(self.first_item)
if isinstance(first_item, str):
c.addItem(first_item)
if isinstance(last_item, bool):
c.addItem(self.last_item)
if isinstance(last_item, str):
c.addItem(last_item)
def run_task(self, line):
self.log.info("try to start device at line {}".format(line))
self.worker.work_on_line = line
self.worker.run()
self.add_widget_to_grid(self.make_result_label(line = line), line, self.result_col)
if self.aget('save', 0) == "yes":
self.db.save_results()
self.log.info("end task at line {}".format(line))
def add_device_line(self):
self.current_grid_line +=1
self.add_widget_to_grid(self.make_cal_id_combo(line = line), line, self.cal_id_col)
self.add_widget_to_grid(self.make_device_combo(line = line), line, self.devices_col)
self.add_widget_to_grid(self.make_fullscale_combo(line = line), line, self.fullscale_col)
self.add_widget_to_grid(self.make_dut_branch_combo(line = line), line, self.dut_branch_col)
self.add_widget_to_grid(self.make_result_label(line = line), line, self.result_col)
def draw_grid(self):
self.win.setLayout(self.grid)
widget_item = self.grid.itemAtPosition (line, self.result_col)
if widget_item:
l = widget_item.widget()
else:
l.setFixedSize(self.long_line, self.line_heigth*self.mult_line_height)
exchange = self.aget('exchange', line)
elif exchange:
txt = str(exchange)
b = QPushButton("go", self.win)
b.setStyleSheet("background-color: lightgreen")
b.clicked.connect(lambda: self.run_selected(b, line))
c = self.make_combo(self.dut_branches, first_item="select branch")
c.currentIndexChanged.connect(lambda: self.dut_branch_selected(c, line))
return c
def make_fullscale_combo(self, line):
fullscale = []
for d in self.fullscale_list:
fullscale.append(d['Display'])
c = self.make_combo(fullscale, first_item="select fullscale")
c.currentIndexChanged.connect(lambda: self.fullscale_selected(c, line))
return c
self.log.debug("found following devices ids {}".format(device_ids))
c = self.make_combo(device_ids, first_item="select read out device", last_item=False)
c.currentIndexChanged.connect(lambda: self.device_selected(c, line))
if tasks:
self.log.debug("found {} tasks ".format(len(tasks)))
ok = self.evaluate_auto_tasks(tasks, line)
if ok:
first_item = "tasks ok"
c = self.make_combo([task.get('TaskName') for task in tasks], first_item=first_item, last_item=False)
c.currentIndexChanged.connect(lambda: self.task_selected(c, line))
else:
first_item = "task name problem"
c = self.make_combo([task.get('TaskName') for task in tasks], first_item=first_item, last_item=False)
first_item = "no task"
c = self.make_combo([], first_item=first_item, last_item=False)
def get_pressure_from_range_expr(self, range_expr, line):
value = self.fget("fullscale_value", line)
unit = self.aget("fullscale_unit", line)
if unit and value and range_expr in self.range_exprs:
value = value * self.range_exprs[range_expr]
self.log.debug("found {} {}".format(value, unit))
return value, unit
for task in tasks:
task_name = task.get('TaskName')
if 'From' in task:
task['From'] , task['FromUnit'] , = self.get_pressure_from_range_expr(task.get('From'), line)
task['To'] , task['ToUnit'] , = self.get_pressure_from_range_expr(task.get('To'), line)
for init_task in auto_init_tasks:
sufix = init_task.get('TaskName').replace("auto_init_", "")
related_offset_task = "auto_offset_{}".format(sufix)
for offset_task in auto_offset_tasks:
if offset_task.get('TaskName') == related_offset_task:
offset_all_sequence.append(init_task)
offset_all_sequence.append(offset_task)
self.aset("offset_all_sequence", line, offset_all_sequence)
self.aset("auto_init_tasks", line, auto_init_tasks)
def run_selected(self, combo, line):
wactbprot
committed
wactbprot
committed
self.db.choose_task(task_name, line)
self.add_widget_to_grid(self.make_run_button(line=line), line, self.run_btn_col)
self.log.info("task with name {} selected at line {}".format(task_name, line))
self.log.debug("select {} at line {}".format(doc_id, line))
task_combo = self.make_task_combo(doc_id = doc_id, line = line)
if task_combo:
self.add_widget_to_grid(widget=task_combo, line=line, col=self.task_col)
defaults = self.db.get_defaults(doc_id)
self.aset('defaults', line, defaults)
current_defaults_col = self.start_defaults_col
for label_val, edit_val in defaults.items():
self.log.debug(label_val)
self.log.debug(edit_val)
label_widget, edit_widget = self.make_label_edit_pair(label_val, edit_val, line)
self.add_widget_to_grid(label_widget, line, current_defaults_col)
self.add_widget_to_grid(edit_widget, line, current_defaults_col +1)
current_defaults_col = current_defaults_col +2
def cal_id_selected(self, combo, line):
cal_id = combo.currentText()
def fullscale_selected(self, combo, line):
fs = combo.currentText()
self.aset('fullscale_display', line, d['Display'])
self.aset('fullscale_value', line, d['Value'])
self.aset('fullscale_unit', line, d['Unit'])
self.log.info("select fullscale {}".format( fs ))
break
def dut_branch_selected(self, combo, line):
dut = combo.currentText()
self.aset('dut_branch', line, dut)
self.log.info("device at line {} attached to {}".format(line, dut ))
self.add_widget_to_grid(self.make_year_combo() ,self.year_line, self.year_col)
def env_selected(self, combo):
env = combo.currentText()
self.aset('enviroment', 0, env )
self.add_widget_to_grid(self.make_add_device_button(), self.add_device_btn_line, self.add_device_btn_col)
if env == "production":
self.aset('save', 0, "yes" )
# ... chatbot to all on
if env == "development":
self.aset('save', 0, "no" )
self.log.info("select enviroment {}".format(env))
self.add_widget_to_grid(self.make_env_combo(), self.env_line, self.env_col)
def default_change(self, edit_widget, label_val, line):
self.log.debug(label_val)
defaults = self.dget('defaults', line)
task_db = self.dget('task_db', line)
if label_val in defaults:
defaults[label_val] = str(edit_widget.text())
self.aset('defaults', line, defaults)
task = self.db.replace_defaults(task=task_db, defaults=defaults)
self.aset('task', line, task)
self.r.flushdb()
if True:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)