def __init__(self, parent=None, config_obj=None): super(Olfactometers, self).__init__() # not sure if this will work. if not config_obj: self.config_fn, self.config_obj = get_olfa_config() elif isinstance(config_obj, dict): self.config_obj = config_obj elif isinstance(config_obj, str): self.config_fn, self.config_obj = get_olfa_config(config_obj) else: raise OlfaException( "Passed config_obj is of unknown type. Can be a dict, path to JSON or None." ) menubar = self.menuBar() self._buildmenubar(menubar) self.olfa_specs = self.config_obj['Olfactometers'] self.olfas = self._config_olfas(self.olfa_specs) try: self.dilutor_specs = self.config_obj[ 'Dilutors'] # configure *global* dilutors. self.dilutors = self._config_dilutors(self.dilutor_specs) except (TypeError, KeyError): # no global Dilutors are specified, which is OK! self.dilutors = [] self.setWindowTitle("Olfactometry") layout = QtGui.QVBoxLayout() for olfa in self.olfas: layout.addWidget(olfa) for dilutor in self.dilutors: layout.addWidget(dilutor) central_widget = QtGui.QWidget() self.setCentralWidget(central_widget) central_widget.setLayout(layout) self.statusBar() QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('CleanLooks'))
def main(): app = QtGui.QApplication(sys.argv) conf = get_olfa_config() olf_conf = conf['olfas'][0] w = TeensyOlfa(None, olf_conf) w.show() sys.exit(app.exec_())
def _reload_config(self): try: _, config_obj = get_olfa_config(self.config_fn) self.olfa_specs = config_obj['Olfactometers'] except ValueError as e: errorbox = QtGui.QErrorMessage(self) errorbox.showMessage('Error, JSON is not valid: {0}'.format( e.message)) return logging.info('Reloading config from {0}'.format(self.config_fn)) for olfa in self.olfas: olfa.close_serial() olfa.deleteLater() # deletes all timers, etc. self.olfas = [] _, config_obj = get_olfa_config(self.config_fn) self.olfa_specs = config_obj['Olfactometers'] self.olfas = self._config_olfas(self.olfa_specs) for o in self.olfas: self.centralWidget().layout().addWidget(o) return