[Résolu][Python]Apso et dialogue
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 !
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 !
[Résolu][Python]Apso et dialogue
Bonjour,
je profite de ce sujet pour remercier tous ceux qui ont participé à cette extension
Toutefois, je joins un fichier test qui montre un dysfonctionnement de son lanceur. Tout (enfin j'espère) est expliqué dans le doc.
A plus.
je profite de ce sujet pour remercier tous ceux qui ont participé à cette extension
Toutefois, je joins un fichier test qui montre un dysfonctionnement de son lanceur. Tout (enfin j'espère) est expliqué dans le doc.
A plus.
- Pièces jointes
-
- Solides - test.odt
- (16.56 Kio) Téléchargé 155 fois
Dernière modification par joel275 le 24 avr. 2018 16:03, modifié 1 fois.
A jour de LibreOffice et de Ubuntu
- Hubert Lambert
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 09:26
Re: [Python]Apso et dialogue
Bonjour Joël,
Désolé de répondre si tardivement, je suis passé totalement à côté de ton message.
J'ai jeté un rapide coup d'oeil, sans bien comprendre ce qui se passe. Apparemment, ce serait lié à l'utilisation d'une variable globale.
J'essaierai de regarder cela plus attentivement demain soir.
Cordialement.
Désolé de répondre si tardivement, je suis passé totalement à côté de ton message.
J'ai jeté un rapide coup d'oeil, sans bien comprendre ce qui se passe. Apparemment, ce serait lié à l'utilisation d'une variable globale.
J'essaierai de regarder cela plus attentivement demain soir.
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)
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)
- Hubert Lambert
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 09:26
Re: [Python]Apso et dialogue
Merci d'avoir signalé ce problème, dont je n'ai pas sans mal identifié la cause : APSO utilise une instance d'un objet "PythonScriptProvider" différente de celle du programme.
Cela n'affecte pas l'exécution des macros... sauf dans le cas d'utilisation de variables "globales" (usage rarissime en python). Lorsqu'une macro est exécutée par APSO, ces variables sont initiées par "son" PythonScriptProvider, et restent donc inconnues de celui du programme. Or, à la modification de la sélection d'une opacité dans le second dialogue, c'est le programme (et non plus APSO) qui exécute la commande, provoquant une erreur puisque aucune variable globale nommée "solide" n'existe.
J'ai créé une version d'APSO provisoire, qui utilise cette fois l'objet "PythonScriptProvider" instancié par le programme. Je dois encore la tester plus sérieusement, mais je la propose néanmoins ci-dessous pour une première épreuve "live" .
Cordialement.
Cela n'affecte pas l'exécution des macros... sauf dans le cas d'utilisation de variables "globales" (usage rarissime en python). Lorsqu'une macro est exécutée par APSO, ces variables sont initiées par "son" PythonScriptProvider, et restent donc inconnues de celui du programme. Or, à la modification de la sélection d'une opacité dans le second dialogue, c'est le programme (et non plus APSO) qui exécute la commande, provoquant une erreur puisque aucune variable globale nommée "solide" n'existe.
J'ai créé une version d'APSO provisoire, qui utilise cette fois l'objet "PythonScriptProvider" instancié par le programme. Je dois encore la tester plus sérieusement, mais je la propose néanmoins ci-dessous pour une première épreuve "live" .
Cordialement.
- Pièces jointes
-
- apso_v1.1.3.oxt
- (33.11 Kio) Téléchargé 130 fois
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)
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)
Re: [Python]Apso et dialogue
Bonjour Hubert,
merci pour ce retour, il n'y avait pas d'urgence vu que je peux toujours lancer le script à partir d'un bouton ou de LOo/AOo. Cependant, je vais utiliser cette dernière version.
J'ai bien compris que Python ne "favorisait" pas l'usage de variables globales (risque évident de les modifier par inadvertance en cours de programme), mais je ne vois pas comment s'en passer dans une routine appelée non pas par le programme principal mais par un évènement
A plus.
merci pour ce retour, il n'y avait pas d'urgence vu que je peux toujours lancer le script à partir d'un bouton ou de LOo/AOo. Cependant, je vais utiliser cette dernière version.
J'ai bien compris que Python ne "favorisait" pas l'usage de variables globales (risque évident de les modifier par inadvertance en cours de programme), mais je ne vois pas comment s'en passer dans une routine appelée non pas par le programme principal mais par un évènement
A plus.
A jour de LibreOffice et de Ubuntu
- Jurassic Pork
- PassiOOnné
- Messages : 623
- Inscription : 10 août 2017 00:15
Re: [Résolu][Python]Apso et dialogue
hello joel,
je ne sais pas si ton projet est expérimental ou si tu comptes aller plus loin, j'ai ajouté quelques améliorations (en pièce jointe) à ce que tu nous proposais dans ton document writer :
1 - Effacement de la figure tracée avant d'en tracer une nouvelle.
2 - Centrage de la figure.
3 - Positionnement des boîtes de dialogues.
Voici ce que cela donne avec LibreOffice 5.4 sous Windows 10 (cliquer sur l'image pour voir l'animation) : Ami calmant, JP
je ne sais pas si ton projet est expérimental ou si tu comptes aller plus loin, j'ai ajouté quelques améliorations (en pièce jointe) à ce que tu nous proposais dans ton document writer :
1 - Effacement de la figure tracée avant d'en tracer une nouvelle.
2 - Centrage de la figure.
3 - Positionnement des boîtes de dialogues.
Voici ce que cela donne avec LibreOffice 5.4 sous Windows 10 (cliquer sur l'image pour voir l'animation) : Ami calmant, JP
- Pièces jointes
-
- Solides - test.odt
- (18.6 Kio) Téléchargé 130 fois
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Re: [Résolu][Python]Apso et dialogue
Bonjour,
merci pour ta contribution. Je poursuis dans la section Projets: https://forum.openoffice.org/fr/forum/v ... 23#p311723
A plus.
merci pour ta contribution. Je poursuis dans la section Projets: https://forum.openoffice.org/fr/forum/v ... 23#p311723
A plus.
A jour de LibreOffice et de Ubuntu
- Hubert Lambert
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 09:26
Re: [Python]Apso et dialogue
Il "suffit" de gérer les événements soi-même, ainsi tu peux passer ce que tu veux (l'objet solide en l'occurrence) à la construction du listener .joel275 a écrit :je ne vois pas comment s'en passer dans une routine appelée non pas par le programme principal mais par un évènement
Pour l'objet gdoc c'est plus facile, puisqu'il est chaque fois possible de la passer en argument.
Exemple (supprimer d'abord l'événement défini pour le contrôle LbOpacite) :
Code : Tout sélectionner
import unohelper
from com.sun.star.awt import XItemListener
class ItemListener(unohelper.Base, XItemListener):
def __init__(self, solide):
self.solide = solide
def disposing(self, source):
pass
def itemStateChanged(self, event):
self.solide.opacite = [100, 20, 0][event.Selected]
for x in self.solide.faces:
x[1].FillTransparence = self.solide.opacite
def MisePlaceSolide(*oEvt):
"""entrée du programme"""
gdoc = XSCRIPTCONTEXT.getDocument()
maBoite = loadDialog("Standard","ChoixSolide", "document", gdoc)
if maBoite.execute() == CANCEL:
return
NoSolide = maBoite.getControl('LbSolide').SelectedItemPos
A = [ [1,1,1], [-1,-1,1], [1,-1,-1], [-1,1,-1] ] # pour cube, tétraèdre, octaèdre, icosaèdre et dodécaèdre
B = A + [ [1,-1,1], [-1,1,1], [1,1,-1], [-1,-1,-1] ]
a, b = 1.618033989, (1, 0.618033988)[NoSolide == 4]
T = [ [0,a,b], [0,a,-b], [0,-a,b], [0,-a,-b], [b,0,a], [b,0,-a], [-b,0,a], [-b,0,-a], [a,b,0], [a,-b,0], [-a,b,0], [-a,-b,0] ]
dico = {0: ('cube', B), 1: ('tétraèdre', A), 2: ('octaèdre', A), 3: ('icosaèdre', T), 4: ('dodécaèdre', T + B)}
faces = trouveFaces(dico[NoSolide] [1] )
solide = Solide(dico[NoSolide], faces)
solide.affiche(gdoc)
maBoite.dispose()
maBoite = loadDialog("Standard","TourneSolide", "document", gdoc)
liste = maBoite.getControl("LbOpacite")
itemlistener = ItemListener(solide)
liste.addItemListener(itemlistener)
maBoite.execute()
maBoite.dispose()
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)
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)