incunabulum / guidata

Python library generating graphical user interfaces for easy dataset editing and display / From code.google.com
Other
0 stars 0 forks source link

guidata et matplotlib #7

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Bonjour,

Y a t il un moyen de contourner les 2 limitations que je rencontre en 
générant un graphique matplotlib depuis une interface guidata :

1. l'utilisateur final doit sortir de l'interface guidata pour prendre la main 
sur le graphique.  Dommage, car ma façon de lancer l'interface guidata dans 
une boucle infinie est rendue inutile (simple et pratique pour éviter de 
relancer l'interface à chaque run) cf. test.py

2.  une petite classe permet de rendre draggable un texte matplotib, à 
condition que l'application reste active (cf. test3.py). 
(http://www.scipy.org/Cookbook/Matplotlib/Drag_n_Drop_Text_Example). La classe 
est donc inopérante si je suis obligé de sortir de l'interface guidata. Je 
supprime donc la boucle infinie  (cf. test2.py), mais le texte n'est toujours 
pas draggable à cause semble t il de l'instruction guidata.qapplication(), 
rendue nécessaire par guidata.

Merci pour cette librairie qui permet de se concentrer sur les algorithmes, 
tout en bénéficiant d'une interface GUI formidable.

Loïc

Original issue reported on code.google.com by loic.duf...@hotmail.fr on 14 Jun 2011 at 9:12

Attachments:

GoogleCodeExporter commented 9 years ago

Original comment by loic.duf...@hotmail.fr on 15 Jun 2011 at 2:55

Attachments:

GoogleCodeExporter commented 9 years ago
Faute d'une solution plus élégante, voilà le bricolage que j'ai trouvé, 
dont le seul mérite est de donner le résultat attendu : le graphique 
matplotlib lancé depuis un formulaire GUI reste manipulable, notamment les 
textes sont draggables (avec néanmoins un petit défaut pas trop gênant, un 
processus reste actif à la sortie du formulaire)

La solution consiste à lancer la fonction de plot en ligne de commande dans un 
autre processus. Dans ce processus séparé, les instructions nécessaires à 
l'exécution de GUIDATA sont sautées, car elles empêchent de prendre la main 
sur le graphique(app = guidata.qapplication(), prm.edit(),  app.exec_())

Si quelqu'un a une solution plus propre, je suis preneur.

Original comment by loic.duf...@hotmail.fr on 18 Jun 2011 at 9:21

Attachments:

GoogleCodeExporter commented 9 years ago
Si j'ai bien compris le problème, la solution la plus élégante consisterait 
à utiliser plutôt un DataSetEditGroupBox -- voir le test guidata 
editgroupbox.py 
(http://code.google.com/p/guidata/source/browse/guidata/tests/editgroupbox.py#78
). L'idée serait d'intégrer ce widget dans une interface graphique dans 
laquelle vous auriez également intégré un widget Matplotlib (cf. exemple 
Matplotlib "embedding_in_qt4.py").

Ou alors, vous pourriez utiliser directement guiqwt (voir l'exemple plot.py 
pour l'ajout d'une étiquette et l'exemple simple_dialog.py ou simple_window.py 
pour l'intégration dans une boîte de dialogue ou dans une fenêtre principale 
d'un formulaire guidata et d'un graphique guiqwt) au lieu de Matplotlib : dans 
ce cas, vous n'auriez pas besoin d'écrire une classe pour implémenter le drag 
d'une étiquette texte... ni même besoin d'écrire le widget Matplotlib 
évoqué plus haut. Bref, un code plus court et plus facile à maintenir.

Original comment by pierre.raybaut on 6 Nov 2012 at 3:43