Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.
Modérateur :Vilains modOOs
Règles du forum 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 !
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
Quelqu'un saurait-il comment faire? (en espérant que ce ne soit pas trop compliqué )
Merci et à plus.
Dernière modification par joel275 le 04 mars 2018 13:44, modifié 1 fois.
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)
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.
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.
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)
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....