Ciao Hubert,
prima di mostrarti cosa ho fatto ed ottenuto, voglio precisare che LeenO lavora con Python attraverso un unico file che è
pyLeenO/pyleeno.py.
###Configurazione corrente funzionante:
Nel
META-INF/manifest.xml ho questa riga:
Codice: Seleziona tutto
<manifest:file-entry manifest:media-type="application/vnd.sun.star.framework-script" manifest:full-path="pyLeenO" />
In
Addons.xcu indico il percorso completo dei comandi in questo modo:
Codice: Seleziona tutto
<value>vnd.sun.star.script:LeenO.oxt|pyLeenO|pyleeno.py$DlgMain?language=Python&location=user:uno_packages</value>
in cui
LeenO.oxt|pyLeenO|pyleeno.py ovviamente è il percorso relativo di installazione dell'add-on, che è ciò che mi obbliga a tenere fisso il nome del file di installazione in
LeenO.oxt, e
DlgMain è il nome della funzione/macro richiamata dal menù.
Per gestire il comando come servizio ho fatto un po' di prove:
###Configurazione alternativa n.1:
Ho aggiunto nel file
pyLeenO/pyleeno.py la definizione di trigger:
Codice: Seleziona tutto
def trigger(self, arg):
if arg=='DlgMain': DlgMain()
g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation(None,
"org.giuseppe-vizziello.leeno",
("org.giuseppe-vizziello.leeno",),)
quindi in
Addons.xcu ho definito la voce di menù:
Codice: Seleziona tutto
<value>service:org.giuseppe-vizziello.leeno?DlgMain</value>
Ho ricompilato il pacchetto e reinstallato. Ho provato ad avviare la voce di menù, ma non ho ottenuto nulla, nemmeno un messaggio di errore.
###Configurazione alternativa n.2:
ho aggiunto al pacchetto un secondo file di Python con nome
LeenO.py da cui richiamare i comandi definiti in
pyLeenO/pyleeno.py.
Codice: Seleziona tutto
#LeenO.py
import uno
import unohelper
from pyLeenO.pyleeno import DlgMain
def trigger( self, args ):
if arg=='DlgMain':
DlgMain()
g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation(None,
"org.giuseppe-vizziello.leeno",
("org.giuseppe-vizziello.leeno",),)
in
META-INF/manifest.xml ho aggiunto:
Codice: Seleziona tutto
<manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=Python" manifest:full-path="LeenO.py" />
In questo caso, già in fase di installazione di LeenO.oxt ottengo questo errore:
- (com.sun.star.uno.RuntimeException) { { Message = "<class 'ImportError'>: No module named 'pyLeenO' (or 'pyLeenO.pyleeno.DlgMain' is unknown), traceback follows\X000a File \"C:\\Program Files\\LibreOffice\\program\\pythonloader.py\", line 149, in writeRegistryInfo\X000a mod = self.getModuleFromUrl( locationUrl )\X000a File \"C:\\Program Files\\LibreOffice\\program\\pythonloader.py\", line 104, in getModuleFromUrl\X000a exec(codeobject, mod.__dict__)\X000a File \"C:\\Users\\giuserpe\\AppData\\Roaming\\LibreOffice\\4\\user\\uno_packages\\cache\\uno_packages\\lu44766xfcu.tmp_\\LeenO.oxt\\LeenO.py\", line 16, in <module>\X000a from pyLeenO.pyleeno import DlgMain\X000a File \"C:\\Program Files\\LibreOffice\\program\\uno.py\", line 434, in _uno_import\X000a raise uno_import_exc\X000a File \"C:\\Program Files\\LibreOffice\\program\\uno.py\", line 356, in _uno_import\X000a return _builtin_import(name, *optargs, **kwargs)\X000a\X000a", Context = (com.sun.star.uno.XInterface) @0 } }
che mi dice che ho un errore di importazione.
###Configurazione alternativa n.3:
Ho fatto una terza prova cambiando in
META-INF/manifest.xml
Codice: Seleziona tutto
<manifest:file-entry manifest:media-type="application/vnd.sun.star.framework-script" manifest:full-path="pyLeenO" />
con
Codice: Seleziona tutto
<manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=Python" manifest:full-path="pyLeenO/pyleeno.py" />
alla reinstallazione del pacchetto ottengo:
- (com.sun.star.uno.RuntimeException) { { Message = "<class 'NameError'>: name 'XSCRIPTCONTEXT' is not defined, traceback follows\X000a File \"C:\\Program Files\\LibreOffice\\program\\pythonloader.py\", line 149, in writeRegistryInfo\X000a mod = self.getModuleFromUrl( locationUrl )\X000a File \"C:\\Program Files\\LibreOffice\\program\\pythonloader.py\", line 104, in getModuleFromUrl\X000a exec(codeobject, mod.__dict__)\X000a File \"C:\\Users\\giuserpe\\AppData\\Roaming\\LibreOffice\\4\\user\\uno_packages\\cache\\uno_packages\\lu44766xfd4.tmp_\\LeenO.oxt\\pyLeenO\\pyleeno.py\", line 7374, in <module>\X000a createUnoService =(XSCRIPTCONTEXT.getComponentContext().getServiceManager().createInstance)\X000a\X000a", Context = (com.sun.star.uno.XInterface) @0 } }
quindi
XSCRIPTCONTEXT non risulta definito...
Cos'altro ancora non ho provato?