Python: Importer modular

Innhald

# Importera Phyton-modular

LibreOffice Python-skript kjem i tre ulike versjonar. Dei kan vera personlege, delte eller innebygde i dokument. Dei er lagra på ymse stadar som forklart i Python Scripts Organization and Location. For å importera Python-modular må plasseringa av dei vera kjend av Python under køyringa.

Denne mekanismen er vist for modular baserte på filsystem og dokument. Unntakhandsaminga er ikkje teke med for å gjera det enklare å forstå. Termbibliotek eller mappe, skript eller modular vert brukte om kvarandre. Ein Python-makro refererer til ein funksjon inne i ein modul.

Merk at den lokale mappa <User Profile>Scripts/python/pythonpath alltid vert utforska når ein Python-makro vert køyrd frå <User Profile>/Scripts/python.

## Fil-system modul import

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.

### Brukar eller delte modular

Personlege og delte Python-skript kan importerast når biblioteka er importerte i Python-køyremiljøet. Sjå nettsida Getting session information for meir informasjon om utelate øktklasse.

            # -*- coding: utf-8 -*-
            from __future__ import unicode_literals
            import sys

            user_lib = Session().UserPythonScripts # Plasseringa av brukarskript
            if not user_lib in sys.path:
                sys.path.insert(0, user_lib) # Legg til søkjesti
            import screen_io as ui # 'modulen ligg i user_lib katalogen
            # Her kjem koden din

Dette Python-eksempelet eksponerer ein lokal local XSCRIPTCONTEXT-variabel til ein importert modul.

            # -*- coding: utf-8 -*-
            from __future__ import unicode_literals
            import uno, sys

            share_lib = Session.SharedPythonScripts() # Plasseringa av delte skript
            if not share_lib in sys.path:
                sys.path.insert(0, share_lib) # Legg til søkjestien
            from IDE_utils import ScriptContext # 'IDE_utils.py' sit med delte Python-skript.
            XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
            # Her kjem koden din

### Installera modular for program

I motsetnad til personlege og delte skript, kan skript installerte i LibreOffice importerast når som helst. Ved sida av LibreOffice pythonmodulane uno og unohelper kan andre skript som finst i mappa <installation_path>/program importerast direkte, som for eksempel modulen msgbox.

Med Pythonskal:

>>> import msgbox, uno

>>> myBox = msgbox.MsgBox(uno.getComponentContext())

>>> myBox.addButton("okay")

>>> myBox.renderFromButtonSize()

>>> myBox.numberOflines = 2

>>> print(myBox.show("A small message",0,"Dialog title"))

## Import av dokumentmodul

Korleis du importerer ein innebygd Python-modul er forklart nedanfor. Feilhandsaminga er ikkje teke med. Stien for Python køyretid vert oppdatert når dokumentet vert opna og før det vert lukka. Sjå Hendingsdrivne makroar for å læra meir om korleis du kan kopla Python-makroar til hendingar i dokumentet.

            # -*- coding: utf-8 -*-
            from __future__ import unicode_literals

            import sys, uno, zipimport

            def OnDocPostOpenLoadPython(event = None):
                """ Gjer klar import av Python-modular når doc. vert lasta """
                PythonLibraries.loadLibrary('lib/subdir') # Legg ei mappe til søkjestien
                PythonLibraries.loadLibrary('my_gui', 'screen_io') # Legg til dir. og import screen_io

            def OnDocQueryCloseUnloadPython(event = None):
                """ Rydd opp i PYTHON_PATH når dok. vert lukka """
                PythonLibraries.unloadLibrary('min_gui') # Python rydding under køyretid
                # Merk: Dei importerte modulane vert verande innlasta i desse eksempla.

            class PythonLibraries():
                """ Python biblioteklastar og modulimportør

                henta frå «Bibliothèque de fonctions» av Hubert Lambert
                på https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                def isImportedModule(module_name: str) -> bool:
                    """ Sjekk modullista for køyretid """
                    return (module_name in sys.modules.keys())
                def isLoadedLibrary(lib_name: str) -> bool:
                    """ Sjekk innhaldet i PYTHON_PATH """
                    url = uno.fileUrlToSystemPath(
                        f'{doc.URL}/Scripts/python/{lib_name}' )
                    return (url in sys.path)
                def loadLibrary(lib_name: str, module_name=None):
                    """ legg mappe til PYTHON_PATH, importer namngjeven modul """
                    doc = XSCRIPTCONTEXT.getDocument()
                    url = uno.fileUrlToSystemPath(
                        f'{doc.URL}/Scripts/python/{lib_name}' )
                    if not url in sys.path:
                        sys.path.insert(0, url)
                    if module_name and not module_name in sys.modules.keys():
                        return zipimport.zipimporter(url).load_module(module_name)
                def unloadLibrary(lib_name: str):
                    """ fjern mappa frå PYTHON_PATH """
                    doc = XSCRIPTCONTEXT.getDocument()
                    url = uno.fileUrlToSystemPath(
                        f'{doc.URL}/Scripts/python/{lib_name}' )
                    sys.path.remove(url)

            g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)

Liknande emne

Få informasjon om økta

Programmering med Python-skript

Organisering og plassering av Pythonskript

Sjå Creating a Python Listener med eksempel på hendingsdrivne makroar.