Bonjour,
Je me suis mis récemment à python et wxpython, j'ai bidouillé un peu pour manipuler les sizers et fort du succès de mes premiers tests, je me lance dans la réalisation d'un arbre (voir les PJ).
Le but est de créer un designer "light" de schémas XML, comme avec xmlspy.
Voilà comment j'ai pensé la chose :
- chaque noeud et ses descendants définissent une branche de l'arbre
- chaque branche est définie par un panel qui contient 2 autres panels : un pour le noeud lui-même, un pour les descendants
- un noeud et ses descendants sont dans un BoxSizer vertical
- les descendants d'un même noeud (chaque descendant définissant une nouvelle branche) sont positionnés par un BoxSizer horizontal
J'ajoute mes noeuds dans mon code et j'obtiens ce que vous pouvez voir sur la 1ère pièce jointe (arbre1.png) (les bordures bleu foncé sont autour des branches)
Jusque là, tout va bien...
Ensuite, ajout dynamique :
- Je crée un nouveau panel pour la nouvelle branche, avec les deux panels imbriqués et le sizer vertical.
- J'ajoute ce panel au sizer horizontal de l'élément parent
- Dans le premier panel, je crée l'élément window qui définit le noeud (les blocs blancs sur les PJ)
- Je ne mets rien dans le deuxième panel (normal, l'élément ajouté n'a pas encore d'enfants), mais je définis le sizer horizontal
Je fais un test, par exemple j'ajoute un élément à la séquence en bas à gauche. Rien ne se passe, ou alors le noeud ajouté apparait partiellement. Si je redimensionne la fenêtre, tout se dessine correctement pour obtenir ce que vous pouvez voir sur la 2nd pièce jointe (arbre2.png).
Je présume qu'il faut appeler la méthode Layout sur un des sizers, le problème c'est que je ne vois pas lequel. J'ai tenté sur le sizer horizontal dans lequel je viens d'ajouter l'élément, RAS. J'ai tenté sur le vertical associé à la branche, RAS. J'ai tenté un Refresh sur la frame, RAS.
Faut-il faire un appel à Layout sur tous les sizers de l'arbre (ou au moins de la branche, jusqu'à la racine) ?
S'il faut faire appel plusieurs fois à Layout, y a-t-il un ordre à respecter dans la hiérarchie des sizers ?
Faut-il appeler une méthode qui m'est encore inconnue ?
Merci pour votre attention
J.
Partager