OVH Cloud OVH Cloud

question wxpython

13 réponses
Avatar
Andréï
Salut,
encore moi a vous embéter avec mes questions... :/

je cherche a créer un squelette d'application avec plug'in que je
pourrais utiliser plus tard.

Donc je voudrais savoir s'il est possible de charger un wxframepanel ou
un menu de une fois que l'application est lancée et sur l'écran?

pour l'instant j'arrive a charger un wxframepanel extérieur, mais dès
le début, lors de l'initialisation.

Personnellement je pense que ca doit etre possible, mais par quelle
voie passer...

10 réponses

1 2
Avatar
Andréï
peut etre en xml avec wx.xrcressource?
Avatar
François Girault
peut etre en xml avec wx.xrcressource?




C'est une voie que j'ai exploré jadis. Décrire les interfaces dans des
langages XML est une voie désormais reconnu productive. Le gain de temps
peut être grand.

Comme en html, on colle des identifiants sur les composants qu'on a posé
via un éditeur graphique qui donne un accès direct à une
prévisualisation de l'interface et permet d'ajuster toutes les
propriétés des composants (couleurs, bordures, etc ...).

Cela épargne pas mal de boulot de code.

Dans wxpython, on peut charger dynamiquement des fichiers XRC (cf le
wiki de wxpython). Par contre il faudra prendre en charge les réponses
aux événements dans du code, à l'aide de fonctions qui permettent de
retrouver le composant par l'identifiant spécifié à la conception graphique.

Je me permet de vous interoger sur l'envergure de votre projet wxpython,
et aussi de votre plateforme. Si la démo est sympa sur toutes les
plateformes, que les "hello world" et autres tutoriaux de base
fonctionnent bien, il n'en est pas de même quand il faut l'intégrer à un
progiciel d'assez grande envergure. On peut se retrouver au coeur
d'inconsistences entre les plate-formes windows et unix pour sombrer
dans une spirale où on ne maitrise plus son temps. Mais cela est
conditionnée par la complexité de l'application.

Aussi, n'hésitez pas à prototyper jusqu'au bout avant de vous engager et
séparez bien les couches de votre application, pour changer au cas où.

PyQt est assez mature et donnent de bon résultats, avec un outil de
design avec qtdesigner, vraiment sympa et l'arrivée de Qt4 en qpl sur
toute les plateformes va surement changer la donne . En 100% libre,
Glade et PyGtk sont parfaitement utilisables et la version windows va
prochainement s'améliorer.

--
FG

Avatar
jean-michel
Andréï wrote:
Salut,
encore moi a vous embéter avec mes questions... :/

je cherche a créer un squelette d'application avec plug'in que je
pourrais utiliser plus tard.

Donc je voudrais savoir s'il est possible de charger un wxframepanel ou
un menu de une fois que l'application est lancée et sur l'écran?

pour l'instant j'arrive a charger un wxframepanel extérieur, mais dès le
début, lors de l'initialisation.

Personnellement je pense que ca doit etre possible, mais par quelle voie
passer...


Bonsoir,

Tu pourrais préciser un peu ?
Qu'est-ce que tu entends par un wxframepanel ? Une fois que ton appli
est lancée, tu peux faire ce que tu veux sur l'écran ou pas.
Le but des classes wxFrame et wxPanel est justement d'afficher qqchose
sur l'écran une fois que l'application est lancée...
Par ailleurs, en quoi ton panel est-il extérieur ? S'agit-il d'un autre
process ? Ou est-ce simplement un module lancé par un import ?
Que cherches-tu à faire exactement ?
A+
jm

Avatar
jean-michel
Andréï wrote:
peut etre en xml avec wx.xrcressource?


Tu vas coder en xml au lieu de coder en python ! Libre à toi !


Avatar
Andréï
Bonsoir,
bonsoir


Tu pourrais préciser un peu ?
Que cherches-tu à faire exactement ?


Ce que je veux faire, c'est créer une base pour mes projets en cours.
A la base une appli qu'on ouvre et avec un menu on charge des plugins
qui comprennent l'interface (sous forme de panels et les menus qui
correspondent) et le module applicatif qui va derriere.

Quand je voudrais créer une appli complete, je n'aurais qu'un fabriquer
les panels sur boa, les modules qui vont derriere et à les inclure dans
mon appli de base.
Je pourrais aussi étendre les possibilitées d'une appli existante
simplement en incluant un nouveau module.

J'ai actuellement un projet en cours qui consiste à créer un outil de
détection des dérives qualité au cours du process de fabrication.

Je voudrais ensuite étendre ce prog, pour en faire un ERP complet.


A++

Avatar
jean-michel
Andréï wrote:
Bonsoir,


bonsoir

Tu pourrais préciser un peu ?
Que cherches-tu à faire exactement ?



Ce que je veux faire, c'est créer une base pour mes projets en cours.
A la base une appli qu'on ouvre et avec un menu on charge des plugins
qui comprennent l'interface (sous forme de panels et les menus qui
correspondent) et le module applicatif qui va derriere.

Quand je voudrais créer une appli complete, je n'aurais qu'un fabriquer
les panels sur boa, les modules qui vont derriere et à les inclure dans
mon appli de base.
Je pourrais aussi étendre les possibilitées d'une appli existante
simplement en incluant un nouveau module.

J'ai actuellement un projet en cours qui consiste à créer un outil de
détection des dérives qualité au cours du process de fabrication.

Je voudrais ensuite étendre ce prog, pour en faire un ERP complet.


A++


Bonjour,

Rien que de très banal.
Supposons que ton appli de base soit représentée par une classe dérivée
de wxFrame. Dans Boa, et si on prend les noms de fichiers sources donnés
par défaut, le démarrage de l'appli se trouve dans App1.py qui contient
entre autres:
...
import Frame1
...
self.main = Frame1.create(None)
...
application.MainLoop()
...
L'import permet de charger le module; le create appelle une fonction qui
crée l'objet Frame1 dérivé de wxFrame (yavait + simple, mais bon, c'est
comme ça dans Boa).

Cet objet Frame1 contient tout un tas de bazar, dont :
def __init__(self, parent):
qui est le constructeur de la classe, donc exécuté une fois à la
création de l'objet (note que là dedans, tu peux mettre absolument ce
que tu veux).
Dans ton cas, il suffit de mettre un import par module dans Frame1.py :
...
import Dialog1
import Dialog2
import Frame2
import Frame3
import Frame4
...
et d'appeler le module lors du choix de l'utilisateur.
Si c'est une wxFrame:
frame = Frame2.create(self)
frame.Show()
Si c'est un wxDialog:
dlg = Dialog1.Dialog1(self)
try:
dlg.ShowModal()
finally:
dlg.Destroy()
Dans le cas de Frame2, on reproduit la même chose que dans Frame1.
Dans le cas de Dialog2, la fenêtre garde forcément le focus à cause de
ShowModal().
On peut faire autrement, ce ne sont que des exemples, tirés d'ailleurs
de la doc (le toturiel Boa si mes souvenirs sont bons).

Avec ce système, tu peux ajouter autant de modules que tu veux dans ton
appli.
A+
jm


Avatar
O.R.
"jean-michel" a écrit dans le message de news:
438cbe20$0$4370$
Andréï wrote:
peut etre en xml avec wx.xrcressource?


Tu vas coder en xml au lieu de coder en python ! Libre à toi !



Bonne remarque, et je me disais exactement la même chose !!

J'ai développé des classes qui "wrappent" wxPython et qui permettent
d'avoir la même syntaxe que Tk (moins lourde que celle de wx).
exemple :
-------------------------------------------------------------
root = Toplevel()
Label(root, text='coucou').pack(side='left')
def h():
print 'coucou'
Button(root, text='the button', command=h).pack(side='left')
root.show()
root.mainloop()
-------------------------------------------------------------

Je pense que c'est plus court que ce que l'on pourrait faire en xml...

O.R.


Avatar
Andréï
Andréï wrote:
Bonsoir,


bonsoir

Tu pourrais préciser un peu ?
Que cherches-tu à faire exactement ?



Ce que je veux faire, c'est créer une base pour mes projets en cours.
A la base une appli qu'on ouvre et avec un menu on charge des plugins qui
comprennent l'interface (sous forme de panels et les menus qui
correspondent) et le module applicatif qui va derriere.

Quand je voudrais créer une appli complete, je n'aurais qu'un fabriquer les
panels sur boa, les modules qui vont derriere et à les inclure dans mon
appli de base.
Je pourrais aussi étendre les possibilitées d'une appli existante
simplement en incluant un nouveau module.

J'ai actuellement un projet en cours qui consiste à créer un outil de
détection des dérives qualité au cours du process de fabrication.

Je voudrais ensuite étendre ce prog, pour en faire un ERP complet.


A++


Bonjour,

Rien que de très banal.
Supposons que ton appli de base soit représentée par une classe dérivée de
wxFrame. Dans Boa, et si on prend les noms de fichiers sources donnés par
défaut, le démarrage de l'appli se trouve dans App1.py qui contient entre
autres:
...
import Frame1
...
self.main = Frame1.create(None)
...
application.MainLoop()
...
L'import permet de charger le module; le create appelle une fonction qui crée
l'objet Frame1 dérivé de wxFrame (yavait + simple, mais bon, c'est comme ça
dans Boa).

Cet objet Frame1 contient tout un tas de bazar, dont :
def __init__(self, parent):
qui est le constructeur de la classe, donc exécuté une fois à la création de
l'objet (note que là dedans, tu peux mettre absolument ce que tu veux).
Dans ton cas, il suffit de mettre un import par module dans Frame1.py :
...
import Dialog1
import Dialog2
import Frame2
import Frame3
import Frame4
...
et d'appeler le module lors du choix de l'utilisateur.
Si c'est une wxFrame:
frame = Frame2.create(self)
frame.Show()
Si c'est un wxDialog:
dlg = Dialog1.Dialog1(self)
try:
dlg.ShowModal()
finally:
dlg.Destroy()
Dans le cas de Frame2, on reproduit la même chose que dans Frame1.
Dans le cas de Dialog2, la fenêtre garde forcément le focus à cause de
ShowModal().
On peut faire autrement, ce ne sont que des exemples, tirés d'ailleurs de la
doc (le toturiel Boa si mes souvenirs sont bons).

Avec ce système, tu peux ajouter autant de modules que tu veux dans ton
appli.
A+
jm


Je vien de trouver la solution, et ca marche bien
je vous met ma solution pour ceux que ca pourrait interresser.
les commentaires sont les bien venus

pour afficher une fenetre extérieure:

answer = 'Frame5'
## La chaine avec le nom peut alors venir d'une fenetre de texte ou
d'un fichier de conf
frame= __import__(answer).create(self)
frame.Show()
Aucun import a faire a l'avance, on ne connait pas le nom de la fentre
affiché à l'avance.

pour changer le panel de mon splitterwindow:

dlg = wx.TextEntryDialog(self, 'Quel est le nom du panel',
'Caption', 'Panel5')
try:
if dlg.ShowModal() == wx.ID_OK:
answer = dlg.GetValue()
fen = getattr(__import__(answer),answer)(id=-1,
name=answer,
parent=self.splitterWindow1, pos=wx.Point(0, 0),
size=wx.Size(272, 150),
style=wx.TAB_TRAVERSAL)
self.splitterWindow1.ReplaceWindow(self.panel2,fen)
finally:
dlg.Destroy()

J'avance dans mon projet, maintenant faut que je brode autour. :')



Avatar
François Girault
"jean-michel" a écrit dans le message de news:
438cbe20$0$4370$

Andréï wrote:

peut etre en xml avec wx.xrcressource?




Tu vas coder en xml au lieu de coder en python ! Libre à toi !



Bonne remarque, et je me disais exactement la même chose !!



euh non ... le source python peut *utiliser* un fichier xml pour
s'épargner le code statique descriptif de l'interface. De toute façon,
la gestion de la réponse aux événement ne sera pas codable en xml et il
faudra écrire du python pour dire qu'on veut faire telle chose en
cliquant sur tel bouton ...

J'ai développé des classes qui "wrappent" wxPython et qui permettent
d'avoir la même syntaxe que Tk (moins lourde que celle de wx).
exemple :
-------------------------------------------------------------
root = Toplevel()
Label(root, text='coucou').pack(side='left')
def h():
print 'coucou'
Button(root, text='the button', command=h).pack(side='left')
root.show()
root.mainloop()
-------------------------------------------------------------



euh c'est de la provoc hein ? :)))) ça me fait d'autant plus marrer car
j'avais commencé un tel "wrapper" dans mon coin :)

Et pourquoi ne pas directement utiliser Tk ? pasque c'est pas beau comme
du wx ? Tk est très stable et surtout très éprouvé bien qu'un peu
rustique (c'est quand même la première alternative libre à motif qu'on
ait vu arriver). Question de priorité dans le choix d'un toolkit ...

Je pense que c'est plus court que ce que l'on pourrait faire en xml...

certes, mais XML n'est pas vraiment fait pour être écrit "à la main",

mais plutot pour être généré par un outil tiers, comme xrced avec
wxpython, glade avec pytgtk/libglade, ou un générateur de formulaire
branché sur une base de données, etc ...

--
FG

Vétéran de la "Toolkit War" ;)



Avatar
jean-michel
François Girault wrote:

"jean-michel" a écrit dans le message de news:
438cbe20$0$4370$

Andréï wrote:

peut etre en xml avec wx.xrcressource?




Tu vas coder en xml au lieu de coder en python ! Libre à toi !




Bonne remarque, et je me disais exactement la même chose !!



euh non ... le source python peut *utiliser* un fichier xml pour


...qu'il va bien falloir coder...

s'épargner le code statique descriptif de l'interface. De toute façon,
la gestion de la réponse aux événement ne sera pas codable en xml et il
faudra écrire du python pour dire qu'on veut faire telle chose en
cliquant sur tel bouton ...

J'ai développé des classes qui "wrappent" wxPython et qui permettent
d'avoir la même syntaxe que Tk (moins lourde que celle de wx).
exemple :
-------------------------------------------------------------
root = Toplevel()
Label(root, text='coucou').pack(side='left')
def h():
print 'coucou'
Button(root, text='the button', command=h).pack(side='left')
root.show()
root.mainloop()
-------------------------------------------------------------



euh c'est de la provoc hein ? :)))) ça me fait d'autant plus marrer car
j'avais commencé un tel "wrapper" dans mon coin :)

Et pourquoi ne pas directement utiliser Tk ? pasque c'est pas beau comme
du wx ? Tk est très stable et surtout très éprouvé bien qu'un peu


Il n'y a pas que l'esthétique. wx a des possibilités inexistantes dans
tk (que je sache), par exemple l'impression graphique. Or, au moins pour
des applications de gestion, il est indispensable de pouvoir imprimer,
et wx le fait très bien, avec des possibilités de prévisualisation très
complètes.
Il y a aussi les champs de saisie avec masques, les saisies de dates,
les grid, les listes modifiables, les pages à onglets, etc... Y a-t-il
tout ça dans tcl ?

rustique (c'est quand même la première alternative libre à motif qu'on
ait vu arriver). Question de priorité dans le choix d'un toolkit ...

Je pense que c'est plus court que ce que l'on pourrait faire en xml...

certes, mais XML n'est pas vraiment fait pour être écrit "à la main",

mais plutot pour être généré par un outil tiers, comme xrced avec
wxpython, glade avec pytgtk/libglade, ou un générateur de formulaire
branché sur une base de données, etc ...

A+

jm




1 2