OrsayDev / OrsayLaser

Instrumentation for Laser / Blanker / Gain usage in Nionswift
0 stars 0 forks source link

UI Event .fire question in [gain_inst.py] #18

Closed yvesauad closed 4 years ago

yvesauad commented 4 years ago

salut @kociak une petite question pour toi que je comprends pas..

On a ces deux trois events la (changed_running c'est a moi): self.property_changed_event = Event.Event() self.property_changed_running_event = Event.Event() self.busy_event=Event.Event()

Dans le panneaux.py ils sont defini simplement comme ca: self.property_changed_event_listener=self.instrument.property_changed_event.listen(self.prepare_widget_enable)

ou prepare_widget_enable c'est une methode async que tu connais bien parce que je vous ai volé. Dissons que j'ai definis les deux de la meme facon. Alors dans ce cas la ils sont absolument identique dans ma tete

def prepare_widget_enable(self, value):
        self.event_loop.create_task(self.do_enable(True, ["init_pb"]))
    def prepare_running_widget_enable(self,value):
        self.event_loop.create_task(self.do_enable(True, ["init_pb"]))

si je mets un .fire sur self.property_changed_running_event.fire("yves_stuff") il ne mets pas le UI en mis au jour. Alors le Event se deroule une par fois et on peux par boucler deux? je comprends pas trop. Aussi bizarre c'est que self.busy_event.fire("ex:wavelength") ne pas mis a jour le valleur dans le UI mais seulent bloque tout. Je comprends evidenment pouquoi il bloque tout (dans la definition async il y a la liste de widgets et tout ca) mais je vois pas la raison que il ne mets pas a jour la valeur.

tu comprends que est je veux dire? si la question est pas claire je peux le faire avec un example plus propre.

yvesauad commented 4 years ago

je sais pas trop que est que si passe ici (la partie la plus important) et peut etre que on avait defini le boucle de tous le events ici? sais pas..

def create_spectro_panel(document_controller, panel_id, properties):
        instrument = properties["instrument"]
        #ui_handler =gainhandler(instrument, document_controller.event_loop) #MATHIEU
        ui_handler =gainhandler(instrument, document_controller)
        ui_view=gainView(instrument)
        panel = Panel.Panel(document_controller, panel_id, properties)

        finishes = list()
        panel.widget = Declarative.construct(document_controller.ui, None, ui_view.ui_view, ui_handler, finishes)

        for finish in finishes:
            finish()
        if ui_handler and hasattr(ui_handler, "init_handler"):
            ui_handler.init_handler()
        return panel
kociak commented 4 years ago

si tu fais self.property_changed_running_event.fire("yves_stuff") tous les "listener" de self.property_changed_running_event vont être notifiés que cette évenement à été activé pour une valeur "yves_stuff". Souvent, "yves_stuff" est le nom d'une property. Il y a deux grandes utilisation de firedans swift.

  1. C'est comme cela que le mécanisme de binding va fonctionner sans que tu ai à gérer les mises à jour (tu n'as pas besoin de créer un listener). Dans ce cas, évidement, il faut que tu lies "yves_stuff" à un widget dans ta déclaration de ton UI.
  2. tu crées un listener, et tu relies ce listener à une fonction. Dans ton cas, qqe chose comme self.property_changed_running_event_listener=self.instrument.property_changed_running_event.listen(self.prepare_widget_enable)

je peux être plus précis si tu veux, mais en gros tu sembles n'avoir fait ni 1 ni 2 dans ton exemple