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...

3 réponses

1 2
Avatar
jean-michel
Andréï wrote:
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. :')


Désolé, mais je n'ai rien compris. Ton problème était juste de savoir

comment importer dynamiquement un module ?




Avatar
Andréï
Désolé, mais je n'ai rien compris. Ton problème était juste de savoir comment
importer dynamiquement un module ?


oui, c'est le principe des plugin, non?
ca marche maintenant, me reste a améliorer un petit défaut de
présentation de mon splitter. Pour ca je vais créer un nouveau fil.

Avatar
jean-michel
Andréï wrote:
Désolé, mais je n'ai rien compris. Ton problème était juste de savoir
comment importer dynamiquement un module ?



oui, c'est le principe des plugin, non?
Peut-être, mais ça n'a rien à voir avec wx.

Pas grave.
A+
jm
ca marche maintenant, me reste a améliorer un petit défaut de
présentation de mon splitter. Pour ca je vais créer un nouveau fil.





1 2