Macro python-libreoffice base

Bonjour,
Pour une application sous base que je souhaite créer, j’ étudie les macros en Python. La difficulté que je rencontre est de les faire tourner depuis base. J’ ai bien sauvegarder dans le fichier “/home/elfouste/.config/libreoffice/4/user/Scripts/python” et rendu exécutable la petite macro ci-jointe. Autant elle fonctionne avec une console, autant dans LO base, impossible de la démarrer.
Une remarque, dans le dossier mes macros, si je prends l’ exemple de la macro “HelloWorld.py” et bien que je n’ ai enregistré que cette macro, je me retrouve avec un répertoire composé de:
Mes macros - HelloWorld - HelloWorldpython.
dans le cas de la macro jointe, je n’ ai que:
Mes macros - SelectionFichier.
Pourquoi cette différence?
J’ ai omis, dans la macro des lignes de code?

#!/usr/bin/env python3

from tkinter import filedialog
from tkinter import *

Fnt = Tk()
Fnt.filename = filedialog.askopenfilename(initialdir = ‘/’, title = ’ Sélectionnez un fichier’, filetypes = ((‘jpeg files’, ‘.jpg’), (‘all files’, '.*’)))
print (Fnt.filename)
Par avance merci de vos réponses

Blockquote

Bonjour,

LibreOffice est livré avec sa version de python, indépendante de la version installée au niveau du système.

Plusieurs modules de la bibliothèque Standard ne sont pas livrés avec cette version, pour des raisons d’incompatibilités avec l’exécution d’une session LibreOffice. C’est notamment le cas de tkinter. Il faut donc utiliser l’API de LibO pour construire un élément graphique.

S’agissant d’un dialogue de sélection de fichier, il existe un service “clé sur porte” :

def choosefile():
    ctx = XSCRIPTCONTEXT.getComponentContext()
    create = ctx.ServiceManager.createInstance
    filepicker = create("com.sun.star.ui.dialogs.FilePicker")
    filepicker.execute()
    return filepicker.Files[0]

Cordialement

Bonsoir,
Merci de votre réponse. j’ ai testé sur la console apso sans problème. Une remarque à ce sujet, l’ éditeur d’ apso ne semble pas permettre de sauvegarder le code. Est-ce normal?
D’ autre part mon projet final est de transférer une base access sous libre office. Cette base me permet de trier des photos et de récupérer les données exif.
Dans un terminal Xubuntu, j’ arrive à ce résultat avec le module PyExifTool. Bizarrement sous libre office et python 3.6, la console me renvoie une erreur me disant que ce module n’ existe pas.
Je suis un peu déçu car python me parait relativement facile à apprendre mais dés que l’ on se place dans libre office, tout ce complique!!!
Cordialement

Une remarque à ce sujet, l’ éditeur d’ apso ne semble pas permettre de sauvegarder le code. Est-ce normal?

Apso permet d’organiser, de lancer, de déboguer… un script python dans le contexte de Libreoffice, mais ne permet pas de l’éditer. S’il est correctement configuré, il permet toutefois d’ouvrir le fichier .py dans l’éditeur choisi par l’utilisateur.

Dans un terminal Xubuntu, j’ arrive à ce résultat avec le module PyExifTool. Bizarrement sous libre office et python 3.6, la console me renvoie une erreur me disant que ce module n’ existe pas

Relis ma réponse : “LibreOffice est livré avec sa version de python, indépendante de la version installée au niveau du système.” Si tu as installé PyExifTool au niveau du python système, il reste inconnu du python de LibO.

Pour utiliser un module comme celui-là, qui est du pur python, il suffit de copier le répertoire correspondant dans un sous-répertoire “pythonpath” au niveau du script qui doit l’appeler.

Exemple : si ton script se trouve dans <profil libo>/Scripts/python (emplacement par défaut), tu crées au même niveau un sous-répertoire pythonpath et tu y copies le répertoire exiftool. La ligne suivante devrait alors fonctionner :

import exiftool