def get_float(self, prompt: str, default_value: float = 0, format_str: str = None) -> float: converter = Converter.FloatToStringConverter(format_str) result = self.get_string(prompt, converter.convert(default_value)) return converter.convert_back(result)
def connect_camera_hardware_source( self, camera_hardware_source: HardwareSource.HardwareSource) -> None: assert isinstance(camera_hardware_source, camera_base.CameraHardwareSource) self.__exposure_time_ms_value_model = Model.PropertyModel[float]() def update_exposure_time_ms( exposure_time_ms: typing.Optional[float]) -> None: if exposure_time_ms is not None and exposure_time_ms > 0 and isinstance( camera_hardware_source, camera_base.CameraHardwareSource): frame_parameters = camera_hardware_source.get_frame_parameters( 0) frame_parameters.exposure_ms = exposure_time_ms camera_hardware_source.set_frame_parameters( 0, frame_parameters) self.__update_estimate() self.__exposure_time_ms_value_model.on_value_changed = update_exposure_time_ms exposure_time_ms_value_binding = Binding.PropertyBinding( self.__exposure_time_ms_value_model, "value", converter=Converter.FloatToStringConverter("{0:.1f}")) def eels_profile_parameters_changed( profile_index: int, frame_parameters: camera_base.CameraFrameParameters) -> None: if profile_index == 0 and isinstance( camera_hardware_source, camera_base.CameraHardwareSource): expected_dimensions = camera_hardware_source.get_expected_dimensions( frame_parameters.binning) self.__camera_width = expected_dimensions[1] self.__camera_height = expected_dimensions[0] if self.__exposure_time_ms_value_model: self.__exposure_time_ms_value_model.value = frame_parameters.exposure_ms self.__update_estimate() self.__eels_frame_parameters_changed_event_listener = camera_hardware_source.frame_parameters_changed_event.listen( eels_profile_parameters_changed) eels_profile_parameters_changed( 0, camera_hardware_source.get_frame_parameters(0)) typing.cast(UserInterfaceModule.LineEditWidget, self.__exposure_time_widget._widget).bind_text( exposure_time_ms_value_binding ) # the widget will close the binding
def connect_camera_hardware_source(self, camera_hardware_source): self.__exposure_time_ms_value_model = Model.PropertyModel() def update_exposure_time_ms(exposure_time_ms): if exposure_time_ms > 0: frame_parameters = camera_hardware_source.get_frame_parameters( 0) frame_parameters.exposure_ms = exposure_time_ms camera_hardware_source.set_frame_parameters( 0, frame_parameters) self.__update_estimate() self.__exposure_time_ms_value_model.on_value_changed = update_exposure_time_ms exposure_time_ms_value_binding = Binding.PropertyBinding( self.__exposure_time_ms_value_model, "value", converter=Converter.FloatToStringConverter("{0:.1f}")) def eels_profile_parameters_changed(profile_index, frame_parameters): if profile_index == 0: expected_dimensions = camera_hardware_source.get_expected_dimensions( frame_parameters.binning) self.__camera_width = expected_dimensions[1] self.__camera_height = expected_dimensions[0] self.__exposure_time_ms_value_model.value = frame_parameters.exposure_ms self.__update_estimate() self.__eels_frame_parameters_changed_event_listener = camera_hardware_source.frame_parameters_changed_event.listen( eels_profile_parameters_changed) eels_profile_parameters_changed( 0, camera_hardware_source.get_frame_parameters(0)) self.__exposure_time_widget._widget.bind_text( exposure_time_ms_value_binding ) # the widget will close the binding
def __init__(self, document_controller, instrument: InstrumentDevice.Instrument): super().__init__( document_controller.ui.create_column_widget(properties={ "margin": 6, "spacing": 2 })) self.document_controller = document_controller ui = document_controller.ui sample_combo_box = ui.create_combo_box_widget(instrument.sample_titles) sample_combo_box.current_index = instrument.sample_index sample_combo_box.bind_current_index( Binding.PropertyBinding(instrument, "sample_index")) voltage_field = ui.create_line_edit_widget() voltage_field.bind_text( Binding.PropertyBinding( instrument, "voltage", converter=Converter.PhysicalValueToStringConverter( units="keV", multiplier=1E-3))) beam_current_field = ui.create_line_edit_widget() beam_current_field.bind_text( ControlBinding(instrument, "BeamCurrent", converter=Converter.PhysicalValueToStringConverter( units="pA", multiplier=1E12))) stage_position_widget = PositionWidget(ui, _("Stage"), instrument, "stage_position_m") drift_widget = PositionWidget(ui, _("Drift"), instrument, "Drift") beam_shift_widget = PositionWidget(ui, _("Beam"), instrument, "beam_shift_m") defocus_field = ui.create_line_edit_widget() defocus_field.bind_text( ControlBinding(instrument, "C10", converter=Converter.PhysicalValueToStringConverter( units="nm", multiplier=1E9))) c12_widget = PositionWidget(ui, _("C12"), instrument, "C12") c21_widget = PositionWidget(ui, _("C21"), instrument, "C21") c23_widget = PositionWidget(ui, _("C23"), instrument, "C23") c3_field = ui.create_line_edit_widget() c3_field.bind_text( ControlBinding(instrument, "C30", converter=Converter.PhysicalValueToStringConverter( units="nm", multiplier=1E9))) c32_widget = PositionWidget(ui, _("C32"), instrument, "C32") c34_widget = PositionWidget(ui, _("C34"), instrument, "C34") blanked_checkbox = ui.create_check_box_widget(_("Beam Blanked")) blanked_checkbox.bind_checked( Binding.PropertyBinding(instrument, "is_blanked")) slit_in_checkbox = ui.create_check_box_widget(_("Slit In")) slit_in_checkbox.bind_checked( Binding.PropertyBinding(instrument, "is_slit_in")) voa_in_checkbox = ui.create_check_box_widget(_("VOA In")) voa_in_checkbox.bind_checked(ControlBinding(instrument, "S_VOA")) convergenve_angle_field = ui.create_line_edit_widget() convergenve_angle_field.bind_text( ControlBinding(instrument, "ConvergenceAngle", converter=Converter.PhysicalValueToStringConverter( units="mrad", multiplier=1E3))) c_aperture_widget = PositionWidget(ui, _("CAperture"), instrument, "CAperture", unit="mrad", multiplier=1E3) aperture_round_widget = PositionWidget(ui, _("ApertureRound"), instrument, "ApertureRound", unit="", multiplier=1) energy_offset_field = ui.create_line_edit_widget() energy_offset_field.bind_text( Binding.PropertyBinding( instrument, "energy_offset_eV", converter=Converter.FloatToStringConverter())) energy_dispersion_field = ui.create_line_edit_widget() energy_dispersion_field.bind_text( Binding.PropertyBinding( instrument, "energy_per_channel_eV", converter=Converter.FloatToStringConverter())) beam_row = ui.create_row_widget() beam_row.add_spacing(8) beam_row.add(blanked_checkbox) beam_row.add_spacing(8) beam_row.add(voa_in_checkbox) beam_row.add_stretch() eels_row = ui.create_row_widget() eels_row.add_spacing(8) eels_row.add(slit_in_checkbox) eels_row.add_spacing(8) eels_row.add(ui.create_label_widget("+eV")) eels_row.add_spacing(4) eels_row.add(energy_offset_field) eels_row.add_spacing(8) eels_row.add(ui.create_label_widget("eV/ch")) eels_row.add_spacing(4) eels_row.add(energy_dispersion_field) eels_row.add_stretch() defocus_row = ui.create_row_widget() defocus_row.add_spacing(8) defocus_row.add_spacing(8) defocus_row.add(ui.create_label_widget("Defocus")) defocus_row.add(defocus_field) defocus_row.add_stretch() c3_row = ui.create_row_widget() c3_row.add_spacing(8) c3_row.add_spacing(8) c3_row.add(ui.create_label_widget("Spherical Aberration")) c3_row.add(c3_field) c3_row.add_stretch() sample_row = ui.create_row_widget() sample_row.add_spacing(8) sample_row.add_spacing(8) sample_row.add(sample_combo_box) sample_row.add_stretch() voltage_row = ui.create_row_widget() voltage_row.add_spacing(8) voltage_row.add_spacing(8) voltage_row.add(ui.create_label_widget("Voltage")) voltage_row.add(voltage_field) voltage_row.add_stretch() beam_current_row = ui.create_row_widget() beam_current_row.add_spacing(8) beam_current_row.add_spacing(8) beam_current_row.add(ui.create_label_widget("Beam Current")) beam_current_row.add(beam_current_field) beam_current_row.add_stretch() convergence_angle_row = ui.create_row_widget() convergence_angle_row.add_spacing(8) convergence_angle_row.add_spacing(8) convergence_angle_row.add(ui.create_label_widget("Convergence Angle")) convergence_angle_row.add(convergenve_angle_field) convergence_angle_row.add_stretch() column = self.content_widget column.add(sample_row) column.add(voltage_row) column.add(beam_current_row) column.add(stage_position_widget) column.add(drift_widget) column.add(beam_shift_widget) column.add(defocus_row) column.add(c12_widget) column.add(c21_widget) column.add(c23_widget) column.add(c3_row) column.add(c32_widget) column.add(c34_widget) column.add(beam_row) column.add(convergence_angle_row) column.add(c_aperture_widget) column.add(aperture_round_widget) column.add(eels_row) column.add_stretch()
class Handler(Declarative.Handler): hello3_converter = Converter.FloatToStringConverter(format="{0:#.4g}") hello3_model = Model.PropertyModel(5.6)