def __init__(self, ui): QtGui.QMainWindow.__init__(self) self.ui = ui self.handler = MeasureHandler() self.curr_x = 0 self.channel = None
class SlotContainer(QtGui.QMainWindow): def __init__(self, ui): QtGui.QMainWindow.__init__(self) self.ui = ui self.handler = MeasureHandler() self.curr_x = 0 self.channel = None def checked_all(self, event): sender = self.sender() if sender.isChecked(): self.ui.s11_radio.setEnabled(False) self.ui.s12_radio.setEnabled(False) self.ui.s21_radio.setEnabled(False) self.ui.s22_radio.setEnabled(False) elif not sender.isChecked(): self.ui.s11_radio.setEnabled(True) self.ui.s12_radio.setEnabled(True) self.ui.s21_radio.setEnabled(True) self.ui.s22_radio.setEnabled(True) def browse(self, event): directory = QFileDialog.getExistingDirectory(self, "Donde guardar?", "~", options=QFileDialog.ShowDirsOnly) if self.sender().objectName() == "browse_button": data_file = os.path.join(str(directory), str(self.ui.fileField.text())) self.ui.fileField.setText(data_file) elif self.sender().objectName() == "vna_browse_button": data_file = os.path.join(str(directory), str(self.ui.vna_file_field.text())) self.ui.vna_file_field.setText(data_file) def selected_start_stop(self, event): if self.ui.start_stop_radio.isChecked(): print "Selected start stop" self.ui.bottom_layout.itemAt(3).widget().setParent(None) self.ui.bottom_layout.addWidget(LayoutUtil.get_start_stop_groupbox()) def selected_center_span(self, event): if self.ui.center_span_radio.isChecked(): print "Selected center span" self.ui.bottom_layout.itemAt(3).widget().setParent(None) self.ui.bottom_layout.addWidget(LayoutUtil.get_center_span_groupbox()) def get_port_ip(self): try: ip_port = str(self.ui.ipField.text()).split(":") ip = ip_port[0] port = int(ip_port[1]) self.handler.ip = ip self.handler.port = port return (ip, port) except IndexError: QtGui.QMessageBox.information(self.ui.centralwidget, "IP no especificado", "Es necesario especificar un IP y puerto en el formato IP:puerto") def on_measure(self, event): # WARNING: MAGIC AHEAD # Handler expects ip and port as members of the self.handler object. # get_port_ip() makes sure to put them there self.get_port_ip() params = self self.handler.handle(event, self.ui, params) def on_measure_select(self, event): # Two SMUs can't be in sweep mode or step mode at the same time! # List sweep or constant is fair enough in more than one SMU print "ComboBox: {cbox}, Text = {ctext}".format(cbox=self.sender().objectName(), ctext = self.sender().currentText()) # print self.modes_activated # Pass the sender to the handling function LayoutUtil.layout_update(self.sender(), self.ui) def on_vna_measure(self): if self.channel is not None: self.channel.executor.close() self.channel = None # Makes sure move recreates its executor VnaMeasureThreaded(self.ui) def restore_ui(self): restore_ui(self.ui) def save_ui(self): save_ui(self.ui) def launch_calibration(self): self.ui.cal_ui = Ui_cal_dialog() # Make the calibration dialog available app-wise dialog = QDialog() dialog.ui = self.ui.cal_ui dialog.ui.setupUi(dialog) dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose) handler = CalHandler(self.ui) dialog.exec_() def launch_ri(self): self.ui.ri_ui = Ui_RI_dialog() dialog = QDialog() dialog.ui = self.ui.ri_ui dialog.ui.setupUi(dialog) dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose) handler = RiHandler(self.ui) dialog.exec_() def launch_conalt(self): self.ui.conalt_ui = Ui_conalt_dialog() dialog = QDialog() dialog.ui = self.ui.conalt_ui dialog.ui.setupUi(dialog) dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose) handler = ConAltHandler(self.ui) dialog.exec_() def launch_preset_calibration(self): self.ui.cal_presets_ui = Ui_cal_presets() dialog = QDialog() dialog.ui = self.ui.cal_presets_ui dialog.ui.setupUi(dialog) dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose) handler = PresetHandler(self.ui) dialog.exec_() # TODO Move this elsewhere def move(self, direction): ip_port = str(self.ui.vna_ip_field.text()).split(":") ip = ip_port[0] port = int(ip_port[1]) if self.channel is None: self.channel = VnaChannel(ip, port, 1) self.channel.add_marker(1) start_x = self.channel.get_start_x() stop_x = self.channel.get_stop_x() bandwidth = stop_x - start_x gran = bandwidth/100 # By default 1/100th bandwidth granularity self.curr_x = self.channel.get_x() if direction == Direction.LEFT: self.curr_x = self.curr_x - gran # Save curr_x in container for future use elif direction == Direction.RIGHT: self.curr_x = self.curr_x + gran # Save curr_x in container for future use self.channel.set_x(self.curr_x) y = self.channel.get_y() self.ui.y_re_label.setText(str(y[0])) self.ui.y_im_label.setText(str(y[1])) self.ui.x_label.setText(str(self.curr_x)) def move_left(self): self.move(Direction.LEFT) def move_right(self): self.move(Direction.RIGHT) def open_file(self): MenuHandlers.handle_open(self.ui) def save_file(self): MenuHandlers.handle_save(self.ui) def save_as_file(self): MenuHandlers.handle_save_as(self.ui) def close(self): MenuHandlers.handle_close(self.ui)