Python scriptekin programatzea

Python makro bat .py fitxategi batean dagoen funtzioa bat da, modulu gisa identifikatzen dena. LibreOffice Basic lengoaian eta haren hamaika UNO objektu, funtzio edo zerbitzuen kasuan ez bezala, Python makroek XSCRIPTCONTEXT UNO objektu bakarra erabiltzen dute, JavaScript eta Beanshell lengoaiek ere partekatzen dutena. g_exportedScripts tupla globalak modu esplizituan zerrendatzen ditu modulu bateko makro hautagarriak. Python moduluek kode-logika autonomoa dute, eta elkarrekiko independenteak dira.

XSCRIPTCONTEXT aldagai globala

Benetako Basic UNO zerbitzuak XSCRIPTCONTEXT aldagai globaletik ondoriozta daitezke. Begiratu LibreOffice APIa XSCRIPTCONTEXTen deskribapen osoa ikusteko. XSCRIPTCONTEXT metodoen laburpena:

Metodoak

Deskribapena

Basic lengoaian honela mapatua:

getDocument()

Scriptak funtzionatuko duen erreferentziako dokumentua.

ThisComponent

getDesktop()

Scriptak funtzionatuko duen erreferentziako mahaigaina.

StarDesktop

getComponentContext()

Scriptak beste UNO osagai batzuk sortzeko erabil dezakeen osagai-testuingurua.

GetDefaultContext


Instalazioan partekatutako HelloWorld eta Capitalise scriptek XSCRIPTCONTEXT aldagai globala erabiltzen duten eta UNOri lotuta dauden makroen adibide dira.

tip

Pythonen irteerako fitxategi estandarra ez dago erabilgarri Python makroak Tresnak - Makroak - Exekutatu makroa menutik exekutatzean. Begiratu Sarrera/irteera pantailara informazio gehiagorako.


Moduluen inportazioa

warning

XSCRIPTCONTEXT ez zaie hornitzen inportatutako moduluei.


LibreOffice Basic liburutegiek klaseak, errutinak eta aldagaiak dituzte; Python moduluek, berriz, klaseak, funtzioak eta aldagaiak dituzte. Python edo UNO eginbideen pieza berrerabilgarri arruntak Nire makroak karpetan biltegiratu behar dira, (erabiltzaile-profila)/Scripts/python/pythonpath barruan. Python liburutegiek moduluak antolatzeko balio dute, moduluen izenen gatazkak sor ez daitezen. Inportatu uno.py partekatutako moduluen barruan.

Benetako BASIC UNO hornidurak uno.py modulua erabilita ondoriozta daitezke. Erabili Python shell interaktiboa moduluaren deskribapen osoa eskuratzeko dir() eta help() Python komandoak erabilita.

Funtzioak

Deskribapena

Basic lengoaian honela mapatua:

absolutize()

Fitxategi baten URL absolutu bat itzultzen du emandako URLetatik abiatuta.

createUnoStruct()

UNO struct bat edo typeName-k emandako salbuespen bat sortzen du.

CreateUNOStruct()

fileUrlToSystemPath()

Sistemaren bide-izen bat itzultzen du.

ConvertFromURL()

getClass()

UNO salbuespen, struct edo interfaze baten klasea itzultzen du.

getComponentContext()

Python exekuzio-garaia hasieratzeko erabilitako UNO osagai-testuinguru itzultzen du.

GetDefaultContext()

Enum()

getConstantByName()

IDL konstante baten balioa begiratzen du, haren izen esplizitua emanda.

Ikusi API konstanteen taldeak

isInterface()

TRUE (egiazkoa) itzultzen du, obj UNO interfaze baten klasea denean.

systemPathToFileUrl()

Fitxategi baten URLa itzultzen du emandako sistemaren bide-izenerako.

ConvertToURL()


LibreLogo eta TableSample instalazioek partekatutako scriptek uno.py modulua darabilte.

Python-Basic lagin gehiago

Python UNO

Basic UNO eginbideak

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

obj = smgr.createInstanceWithContext( .. , ctx)

CreateUnoService()

Ikusi Elkarrizketa-koadro bat irekitzea

CreateUnoDialog()

Ikus Entzule bat sortzea

CreateUnoListener()

Ikusi UNO datu motak

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


Kapsulatutako modulu bat inporatzea

LibreOffice Basic lengoaiak liburutegien arakatzea eta kargatze dinamikoa onartzen duen bezala, Python liburutegiak ere dinamikoki arakatu eta inportatu daitezke. Liburutegi-edukiontziei buruzko informazio gehiagorako, ikusi LibreOffice Application Programming Interface (API) edo deskargatu LibreOffice Software Development Kit (SDK).

Dokumentuan kapsulatutako Python modulu bat inportatzea azaltzen da behean, salbuespenen maneiua ez da xehatu:


            import uno, sys
            
            def load_library(library_name: str, module_name=None):
                """ kargatu liburutegia eta inportatu modulua
                
                Hubert Lambert garatzailearen 'Bibliothèque de fonctions' lanetik moldatua
                https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # uneko dokumentua
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path:  # gehitu bide-izena, beharrezkoa bada
                    sys.path.insert(0, url)  # doclib elementuak lehentasuna hartzen du
                if module_name:  # inportatu, eskatzen bada
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # gehitu <lib> bidea + inportatu <module>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros
        

Emaguzu laguntza!