Programmering med Python-skript

Ein Python-makro er ein funksjon inne i ei .py-fil identifisert som ein modul. I motsetnad til LibreOffice Basic og med titals UNO-objektfunksjonar eller tenester , brukar Python makroar XSCRIPTCONTEXT UNO enkeltobjekt delt med JavaScript og Beanshell. g_exportedScripts viser ei ordna liste over makroar som kan veljast frå ein modul. Python-moduler har sjølvstendig kodelogikk uavhengig av kvarandre.

XSCRIPTCONTEXT global variabel

Basic UNO-funksjonar kan verta utleia frå dei globale variablane XSCRIPTCONTEXT. Sjå LibreOffice API for ein fullstendig omtale av XSCRIPTCONTEXT (på engelsk). XSCRIPTCONTEXT-metodane kan oppsummerast som:

Metodar

Skildring

Brukt i Basic som

getDocument()

Dokumenttilvisinga som skriptet kan brukast på.

ThisComponent

getDesktop()

Datamaskinreferansen som skriptet kan brukast på.

StarDesktop

getComponentContext()

Komponentsamanhengen som skriptet kan bruka for å laga andre UNO-komponentar.

GetDefaultContext


Dei delte skripta i installasjonane HelloWorld og Capitalise syner UNO-relaterte makroar som brukar XSCRIPTCONTEXT sin globale variabel.

tip

Standard utdatafil for Python er ikkje tilgjengeleg når du køyrer Python-makroar frå Verktøy → Makroar → Køyr Makro. Du finn meir om dette på Input/Output to Screen.


Modul-import

warning

XSCRIPTCONTEXT er ikkje tilgjengeleg for importerte modular.


Basicbilblioteka i LibreOffice inneheld klassar, rutinar og variablar. Pythonmodulane inneheld klassar, funksjonar og variablar. Felles snuttar med Python- og UNO-funksjonar som kan brukast om igjen må lagrast i Mine makroar i (Brukarprofil)/Scripts/python/pythonpath. Pythonbiblioteka hjelper til med å organisera modulane slik at det ikkje vert namnekollisjonar. Importer uno.py inne i delte modular.

Ekte BASIC UNO-fasilitetar kan greiast ut ved å bruka modulen uno.py. Bruk Python interactive shell for å få ei fullstendig modulbeskriving ved å bruka Pythonkommandoane dir() og help().

Funksjonar

Beskriving

Brukt i Basic som

absolutize()

Returnerer ei absolutt filadresse frå dei oppgjevne nettadressene.

createUnoStruct()

Lagar ein UNO-struct eller eit unntak gjeve av typeNamn.

CreateUNOStruct()

fileUrlToSystemPath()

Returnerer ein systemsti.

ConvertFromURL()

getClass()

Returnerer klassen av eit konkret UNO-unntak, strukt eller grensesnitt.

getComponentContext()

Returnerer UNO-komponentkonteksten som vert brukt til å setja opp Python-Runtime.

GetDefaultContext()

Enum()

getConstantByName()

Slår opp verdien av ein IDL-konstant ut frå det eintydige namnet.

Sjå gruppene API-konstant

isInterface()

Returnerer SANN, når obj er ein klasse med eit UNO-grensesnitt.

systemPathToFileUrl()

Returnerer ei filadresse for den gjevne systemstien.

ConvertToURL()


Delte skript i LibreLogo og TableSample brukar uno.py-modul.

Fleire Python-Basic-prøver

Python UNO

Basic UNO-eigenskapar

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

obj = smgr.createInstanceWithContext( .. , ctx)

CreateUnoService()

Opna ein dialog

CreateUnoDialog()

See Laga ein lyttar

CreateUnoListener()

Sjå UNO datatypar

CreateUnoValue()

CreateObject()

EqualUnoObjects()

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

GetProcessServiceManager()

def hasUnoInterfaces(obj, *interfaces):

return set(interfaces).issubset(t.typeName for t in obj.Types)

HasUnoInterfaces()

IsUnoStruct()

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

DESK = 'com.sun.star.frame.Desktop'

desktop = smgr.createInstanceWithContext(DESK , ctx)

StarDesktop

desktop = smgr.createInstanceWithContext(DESK , ctx)

doc = desktop.CurrentComponent

ThisComponent


Importera ein innebygd modul

På same måte som LibreOffice Basic har støtte for søking og dynamisk lasting etter behov, kan Python-biblioteka visast når det er behov for det. Du finn meir om bibliotekbehaldarar på LibreOffice Application Programming Interface (API) eller last ned LibreOffice Software Development Kit (SDK).

Nedanfor finn du ein illustrasjon som viser korleis du kan importera ein innebygd modul i Python. Unntakshandsaminga er ikkje teke med:


            import uno, sys
            
            def load_library(library_name: str, module_name=None):
                """ last inn biblioteket og importer modul
                
                Henta frå «Bibliothèque de fonctions» av Hubert Lambert
                på https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # gjeldande dokument
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                viss ikkje adresse i sys.path:  # legg til ein sti om nødvendig
                    sys.path.insert(0, url)  # doclib har forrang
                if module_name:  # importer viss det er spørsmål om det
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # legg til <lib>-st + importer <module>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros
        

Støtt oss!