Python: Programmeren met Python

Inhoud
Index 🔎︎

# Programmeren met Python-scripts

Een Python-macro is een functie binnen een .py-bestand, geïdentificeerd als een module. In tegenstelling tot LibreOffice BASIC en zijn dozijn UNO-objecten functies of services, gebruiken Python-macro's de XSCRIPTCONTEXT UNO-object, gedeeld met JavaScript en Beanshell. De globale tuple g_exportedScripts vermeldt expliciet selecteerbare macro's uit een module. Python-modules bevatten autonome codelogica en zijn onafhankelijk van elkaar.

## XSCRIPTCONTEXT globale variabele

De zuivere Basic UNO-faciliteiten kunnen beïnvloedt worden met de XSCRIPTCONTEXT globale variabele. Lees de LibreOffice-API voor een beschrijving van XSCRIPTCONTEXT. De XSCRIPTCONTEXT methodes zijn in het kort:

Methodes | Omschrijving | Toegewezen in BASIC als
getDocument() | De documentreferentie waarop het script kan werken. | ThisComponent
getDesktop() | De desktopreferentie waarop het script kan werken. | StarDesktop
getComponentContext() | De componentcontext die het script kan gebruiken om andere uno-componenten te maken. | GetDefaultContext

HelloWorld en Capitalise installatie gedeelde scripts tonen aan hoe UNO-macro's de globale variabele XSCRIPTCONTEXT gebruiken.

Standaard uitvoerbestand van Python is niet beschikbaar bij het uitvoeren van Python-macro's via het menu Extra - Macro's - Macro uitvoeren. Bekijk Invoer/uitvoer naar scherm voor meer informatie.

## Module-import

XSCRIPTCONTEXT wordt niet voorzien voor geïmporteerde modules.

LibreOffice Basic-bibliotheken bevatten klassen, routines en variabelen, Python-modules bevatten klassen, functies en variabelen. Herbruikbare delen met Python en UNO-functionaliteit moeten opgeslagen worden in My macros onder (User Profile)/Scripts/python/pythonpath. Python-bibliotheken zorgen voor het organiseren van modules zodat er geen problemen ontstaan door het gebruik van dezelfde module-naam. Importeer uno.py binnen de gedeelde modules.

Echte BASIC UNO faciliteiten kunnen worden afgeleid met module uno.py. Gebruik de Python interactieve shell om de volledige beschrijving van de module te krijgen met dir() and help() Python-opdrachten.

Functies | Omschrijving | Toegewezen in BASIC als
absolutize() | Retourneert een absolute URL van het bestand van de gegeven URL's. |
createUnoStruct() | Maakt voor een opgegeven typeName een UNO struct of exception aan. | CreateUNOStruct()
fileUrlToSystemPath() | Retourneert een systeempad. | ConvertFromURL()
getClass() | Retourneert de klasse van een bepaalde UNO exception, struct of interface. |
getComponentContext() | Retourneert de UNO component context om de Python runtime te initialiseren. | GetDefaultContext()
Enum() getConstantByName() | Zoekt op gegeven naam de waarde op van een IDL-constante. | Zie de API constante groepen
isInterface() | Controle of een object van de klasse UNO-interface is (TRUE). |
systemPathToFileUrl() | Retourneert voor een gegeven systeempad de bestands-URL. | ConvertToURL()

LibreLogo en TableSample installatie gedeelde scripts gebruiken de module uno.py.

## Meer Python-BASIC voorbeelden

Python UNO | Basis UNO functionaliteit
ctx = uno.getComponentContext() smgr = ctx.getServiceManager() obj = smgr.createInstanceWithContext( .. , ctx) | CreateUnoService()
Bekijk Een dialoog openen | CreateUnoDialog()
Een listener aanmaken | CreateUnoListener()
Bekijk UNO-datatypes | 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

## Een ingebedde module importeren

Vergelijkbaar met LibreOffice Basic die het browsen en dynamisch laden van bibliotheken ondersteunt, kunnen in Python bibliotheken op aanvraag worden verkend en geïmporteerd. Voor meer informatie hierover: LibreOffice Application Programming Interface (API) of download LibreOffice Software Development Kit (SDK).

Het importeren van een in een Python-document ingebedde module is hieronder beschreven. De foutafhandeling is beperkt:

                import uno, sys

                def load_library(library_name: str, module_name=None):
                    """ bibliotheek laden en module importeren

                    Bewerkte versie van 'Bibliothèque de fonctions' door Hubert Lambert
                    op https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                    doc = XSCRIPTCONTEXT.getDocument()  # huidige document
                    url = uno.fileUrlToSystemPath( \
                        '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                    if not url in sys.path:  # pad toevoegen indien nodig
                        sys.path.insert(0, url)  # eerst wordt in doclib gezocht
                    if module_name:  # importeren bij verzoek
                        return zipimport.zipimporter(url).load_module(module_name)

                def import_embedded_python():
                    ui = load_library("my_gui",'screen_io')  # toevoegen pad <lib> path en <module>importeren
                    ui.MsgBox(sys.modules.keys())

                g_exportedScripts = (import_embedded_python,)  # Public macros

Verwante onderwerpen

Basic UNO objecten, functies en services

Python Modules Importeren

Invoer/uitvoer naar scherm

Hulp bij LibreOffice Python-scripts