[Résolu][Python]Rendre la main à AOO/LibO

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

[Résolu][Python]Rendre la main à AOO/LibO

Message par joel275 »


La modération vous a écrit: AOo/LOo remplacés par AOO et LibO dans le titre

Bonjour,

dans une boucle python, j'aurais souhaité rendre la main à AOo/LOo pour pouvoir afficher (ou modifier l'affichage) un résultat partiel et je n'ai pas le moindre commencement de début d'idée :oops:
Quelqu'un saurait-il comment faire? (en espérant que ce ne soit pas trop compliqué :D )
Merci et à plus.
Dernière modification par joel275 le 04 mars 2018 13:44, modifié 1 fois.
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Python]Rendre la main à AOO/LibO

Message par Hubert Lambert »

Bonjour Joël,

Je ne comprends pas bien le problème. Lorsque, dans une boucle, on modifie un document, le changement se reflète en principe automatiquement, sans attendre l'itération suivante.
Pourrais-tu préciser un peu le contexte ?
Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Python]Rendre la main à AOO/LibO

Message par joel275 »

Bonsoir,

par exemple:

Code : Tout sélectionner

def exemples(*kargs):
	for i, x in enumerate(L):
		if  i> 0: 	gPage =gDoc.DrawPages.insertNewByIndex(-1)
		else:  		gPage = gDoc.DrawPages.getByIndex(0)
		x = JTexte(x).corrigeFct()
		graphe = Graphe( ( (-7,7),('x',x), '') )       # affichage ici
		maForme1, T = graphe.groupe()
		maForme2 = graphe.repere(T)                # et ici
		collec.add(maForme2)
		maForme2 = gPage.group(collec)
dans ce code qui prend plusieurs secondes, on voit bien que l'affichage ne se fait pas au fur et à mesure mais à la fin du script Python. (pour le tester complètement voir ici:
https://forum.openoffice.org/fr/forum/d ... ?id=128259 bouton Exemples)
Avec une instruction time.sleep(), c'est encore plus visible.
Dans cet exemple, ce n'est pas très gênant, mais si on essaie de faire une animation, ça ne le fait pas!

En basic, l'instruction wait n millisecondes permet de règler le problème.

Bonne soirée.
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Python]Rendre la main à AOO/LibO

Message par Hubert Lambert »

Il semble que ce problème soit propre à Draw (sans doute à Impress aussi), alors que tout fonctionne bien pour Writer ou Calc.
En attendant de trouver une solution plus élégante, un coup de "msgbox" après chaque création de graphique permet de forcer l'affichage.
Cordialement.
 Ajout : Un exemple :
joel275.odg
 
 Ajout : Une autre solution, sans "msgbox" :

Code : Tout sélectionner

from com.sun.star.awt.InvalidateStyle import UPDATE
def exemples(*kargs):
    global  gDoc, gPage
    arg = createPropertyValues(Hidden=False)
    gDoc = XSCRIPTCONTEXT.getDesktop().loadComponentFromURL("private:factory/sdraw", "_blank", 0, arg)
    controller = gDoc.CurrentController
    containerwindow = controller.Frame.ComponentWindow

    collec = createUnoService("com.sun.star.drawing.ShapeCollection")
    L = ['0,5x²', '1/x', '3x-1', 'tan(x)', 'exp(x)']
    for i, x in enumerate(L):
        if  i > 0:
            gPage = gDoc.DrawPages.insertNewByIndex(-1)
        else:
            gPage = gDoc.DrawPages.getByIndex(0)
        x = corrigeFct(x)
        graphe = Graphe( ((-7,7),('x',x), '') )
        maForme1, T = graphe.groupe()
        maForme2 = graphe.repere(T)
        collec.add(maForme2)
        maForme2 = gPage.group(collec)
        controller.CurrentPage = gPage
        containerwindow.invalidate(UPDATE)
 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Python]Rendre la main à AOO/LibO

Message par joel275 »

Bonjour Hubert,

merci de t'intéresser à mon problème; je n'ai pas répondu plus tôt pour cause de vacances (aaahhh! ça fait du bien).
Effectivement, ça marche correctement avec Writer et ça résout mon petit problème.
Par contre, ta solution avec .invalidate(UPDATE) ne fonctionne pas avec ma configuration.
D'autre part, mon niveau d'Anglais ne me permet pas de regarder si le bug a déjà été répertorié et si non de le signaler....

A plus.
A jour de LibreOffice et de Ubuntu