Vsebina

# Uvažanje modulov Python

Skripti Python v LibreOffice so treh različnih vrst: lahko so osebni, v skupni rabi ali vdelani v dokumente. Shranjeni so na različnih mestih, opisanih v Organizacija in mesto skriptov v Pythonu. Da bi uvozili module Python, morajo biti njihova mesta znana iz Pythona v času izvajanja.

Ta mehanizem je ponazorjen za datotečni sistem, ki temelji na modulih in na dokumentih temelječih modulih. Obravnavanje izjem je zaradi jasnosti izpuščeno. Izraza knjižnica ali mapa, skripte ali moduli so zamenljivo uporabljeni. Makro Python se nanaša na funkcijo znotraj modula.

Upoštevajte, da je krajevna mapa <Uporabniški profil>/Scripts/Python/pythonpath vedno preiskana, ko zaganjate makro Python iz <Uporabniški profil>/Scripts/Python.

## Uvoz modula File System

Knjižnice LibreOffice Basic vsebujejo razrede, procedure in spremenljivke, moduli Python pa vsebujejo razrede, funkcije in spremenljivke. Skupne kose ponovno uporabnih funkcionalnosti Python ali UNO je potrebno shraniti v Moje makre v (uporabniški profil)/Scripts/python/pythonpath. Knjižnice Python so priročne za organizacijo modulov, da preprečite spore z imeni modulov. Uvozite uno.py v module za skupno rabo.

### Uporabniški ali skupni moduli

Osebni in skupni skripti Python lahko uvozite, ko so njihove mape vključene v zagonsko pot Pythona. Glejte stran Pridobivanje informacij o sejiza podrobnosti o izpuščenem razredu Session.

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

            user_lib = Session().UserPythonScripts  # Mesto skriptov uporabnika
            if not user_lib in sys.path:
                sys.path.insert(0, user_lib)  # Dodaj v pot iskanja
            import screen_io as ui  # Modul ‘screen_io. py ' prebiva v mapi user_lib
            # Tukaj sledi vaša koda

Ta primer Python izpostavi lokalno spremenljivko XSCRIPTCONTEXT uvoznemu modulu:

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

            share_lib = Session.SharedPythonScripts()  # Mesto skriptov v skupni rabi
            if not share_lib in sys.path:
                sys.path.insert(0, share_lib)  # Dodaj v iskalno pot
            from IDE_utils import ScriptContext  # "IDE_utils. py" sedi s skupnimi skripti Python.
            XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
            # Tukaj sledi vaša koda

### Namestitveni moduli za programe

Za razliko od osebnih in v skupnih skriptov lahko skripte za namestitev LibreOffice uvozite kadar koli. Poleg modulov LibreOffice Python uno in unohelper lahko druge skripte iz mape <pot_namestitve>/program uvozite neposredno, kot npr. modul msgbox.

V lupini Pythona:

>>> 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"))

## Uvoz modula Document

Uvažanje v dokument vdelanega modula Python je prikazano spodaj. Obravnavanje napak ni podrobno opisano. Pot izvajanja Pythona je posodobljena, ko je dokument odprt in preden ga zapremo. Če želite izvedeti, kako povezati makre Python za dokumentiranje dogodkov, glejte makre, ki temeljijo na dogodku.

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

            import sys, uno, zipimport

            def OnDocPostOpenLoadPython(event = None):
                """ Pripravi uvoz modulov Python, ko se naloži dokument """
                PythonLibraries.loadLibrary('lib/subdir')  # Dodaj mapo v iskalno pot
                PythonLibraries.loadLibrary('my_gui', 'screen_io')  # Dodaj mapo in uvozi screen_io

            def OnDocQueryCloseUnloadPython(event = None):
                """ Počisti PYTHON_PATH, ko se dok. zapre """
                PythonLibraries.unloadLibrary(‘my_gui’)  # Čiščenje poti izvajanja Pythona
                # Opomba: uvoženi moduli ostanejo v tem primeru naloženi.

            class PythonLibraries():
                """ Nalagalnik knjižnic in uvoznik modulov Python

                prirejeno po »Bibliothèque de fonctions« avtorja Huberta Lamberta
                na naslovu https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
                def isImportedModule(module_name: str) -> bool:
                    """ Preveri seznam modulov ob izvajanju """
                    return (module_name in sys.modules.keys())
                def isLoadedLibrary(lib_name: str) -> bool:
                    """ Preveri vsebino 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):
                    """ Dodaj mapo v PYTHON_PATH, uvozi imenovani 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):
                    """ Odstrani mapo iz PYTHON_PATH """
                    doc = XSCRIPTCONTEXT.getDocument()
                    url = uno.fileUrlToSystemPath(
                        f'{doc.URL}/Scripts/python/{lib_name}' )
                    sys.path.remove(url)

            g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)

Podobne teme

Pridobivanje informacij o seji

Programiranje s skripti Python

Organizacija in mesto skriptov v Pythonu

Za primere makrov, proženih z dogodki, glejte Ustvarjanje poslušalca Python.