Bonjour a tous!
Je me pose une question d'ordre d'implémentation d'un concept pourtant basique mais pour lequel je me pose quelques questions...
le concept est simple, comment mettre à jour des composants d'une fenêtre suivant ce qui s'y passe dedans.
C'est pas clair je pense donc je vais vous donner un exemple sur ce quoi je travaille:
J'ai une frame avec un canvas à gauche, sur lequel je déplace des objets, je clique sur ceux-ci, etc.
Et à droite un panel de texte montrant les propriétés des objets sur lequels j'ai cliqué et d'autres infos.
Prenons l'exemple tout simple de: "je clique sur un objet de mon canvas, un rectangle disons et je veux que dans le panel de gauche, les champs prévus à cet effet se remplissent (position, couleur, taille par exemple)".
j'ai identifié plusieurs façon de faire ceci, mais python étant un langage laissant extrêmement (trop peut-être...) de liberté au développeur il y a moyen de faire vraiment dans le sale et j'aimerai trouver une solution qui me satisfasse car j'aimerai coder "propre" même en utilisant python! (certains trouveront paradoxal cette phrase, à chacun son opinion..)
- Méthode 1
Lorsque je crée mon canvas, je lui passe en paramètre une référence vers le parent (la frame qui englobe tout donc) et lorsque je détecte un clic qui fait mouche, j'appelle une méthode du parent (updateInfo(selectedObj) par exemple).
Je trouve pas ça génial de sauvegarder le parent dans le composant pour s'en servir, ça crée un couplage qui casse la réutilisabilité de mon canvas dans d'autres applications si jamais (c'est pas prévu mais c'est pas propre alors je n'en veux pas!)- Méthode 2
Lorsque je détecte un clic sur un objet, je crée un event perso que je fire sur la frame globale, l'événement est ensuite capté et les infos mises à jour
Ca me parait propre mais quelque peu... LOURD comme méthode!
De plus, là ça passe parce que je n'ai qu'un canvas, mais avec une autre appli qui aurait pleins de sources d'événements lancés sur la frame principale, ca fait un sacré goulot d'étranglement!
Alors oui il y a le choix de lancer l'événement sur autre chose que la frame principale, disons le panel directement qui s'occupera de gérer les infos mais pour cela, il faudrait que je lie ce panel à mon canvas à sa création et on retourne au problème de la méthode 1...
J'ai encore d'autres méthodes en tête mais elles sont tellement sales que je n'ose même pas en parler...
Donc si une âme charitable pouvait m'éclairer sur ce problème d'apparence basique mais qui pour moi reste flou malgré mes tentatives, je lui serai reconnaissant!
Merci!
Partager