Edukiak
Indizea 🔎︎

# 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.

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

## Moduluen inportazioa

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 kontsola 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

Erlazionatutako gaiak

Oinarrizko UNO objektuak, funtzioak eta zerbitzuak

Python moduluak inportatzea

Sarrera/irteera pantailara

LibreOffice Python scripten laguntza