Programmering med Python-skript

A Python macro is a function within a .py file, identified as a module. Unlike LibreOffice Basic and its dozen of UNO objects functions or services, Python macros use the XSCRIPTCONTEXT UNO single object, shared with JavaScript and BeanShell. The g_exportedScripts global tuple explicitly lists selectable macros from a module. Python modules hold autonomous code logic, and are independent from one another.

XSCRIPTCONTEXT global variabel

Basic UNO-funksjonar kan verta utleidde 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()

Komponentsamahengen som skriptet kan brukast på 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.


LibreOffice Basic libraries contain classes, routines and variables, Python modules contain classes, functions and variables. Common pieces of reusable Python or UNO features must be stored in My macros within (User Profile)/Scripts/python/pythonpath. Python libraries help organize modules in order to prevent module name collisions. Import uno.py inside shared modules.

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-strukt eller eit unnatak gieve 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()

See Opening a 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økjing 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 dinn du ein illustrasjon som viser korleis du kan importera ein innebygd modul i Python. Unntakshandsaminga er ikkje detaljert:


            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