Source code for semi_cr.core.lab.utils.qharbor.form

from dataclasses import dataclass, field

import ipywidgets as widgets
from IPython.display import clear_output, display

from semi_cr.core.lab.utils.dataclass_base import Dataclass

from .attributes import (
    ChipAttributes,
    MeasurementAttributes,
    UserAttributes,
)


[docs] @dataclass class MeasurementState(Dataclass): user: UserAttributes = field(default_factory=UserAttributes) chip: ChipAttributes = field(default_factory=ChipAttributes) measurement: MeasurementAttributes = field(default_factory=MeasurementAttributes)
form_out = widgets.Output() measurement_state = MeasurementState()
[docs] def show_user_form(): display(form_out) with form_out: clear_output() ku_id_widget = widgets.Text(description="KU ID") name_widget = widgets.Text(description="Full Name") next_button = widgets.Button(description="Next") display(ku_id_widget, name_widget, next_button) def on_next(_): measurement_state.user = UserAttributes( UserInitials=ku_id_widget.value, UserName=name_widget.value, ) show_chip_form() next_button.on_click(on_next)
[docs] def show_chip_form(): with form_out: clear_output() project_id_widget = widgets.Text(description="Project ID") component_widget = widgets.Text(description="Component") next_button = widgets.Button(description="Next") display(project_id_widget, component_widget, next_button) def on_next(_): measurement_state.chip = ChipAttributes( ProjectID=project_id_widget.value, Component=component_widget.value, ) show_measurement_form() next_button.on_click(on_next)
[docs] def show_measurement_form(): with form_out: clear_output() measurement_description_widget = widgets.Text( description="Measurement Description", style={"description_width": "200px"}, layout=widgets.Layout(width="500px"), ) submit_button = widgets.Button(description="Create Measurement") display( measurement_description_widget, submit_button, ) def on_submit(_): measurement_state.measurement = MeasurementAttributes( description=measurement_description_widget.value, # Date=date_widget.value, # Notes=notes_widget.value, ) show_summary() submit_button.on_click(on_submit)
[docs] def show_summary(): with form_out: clear_output() print("All forms completed.\n") print("User:") print(measurement_state.user) print("\nChip:") print(measurement_state.chip) print("\nMeasurement:") print(measurement_state.measurement)