Python moduluak inportatzea

LibreOffice Python scriptak hiru motatakoak izan daitezke: pertsonalak, partekatuak edo dokumentuetan kapsulatuak. Hainbat tokitan biltegiratzen dira, begiratu Python scripten antolaketa eta kokalekua. Python moduluak inportatzeko, Python exekuzio-garaian ezagutu behar ditu haien kokalekuak.

Mekanismo hori fitxategi-sistemetan oinarritutako moduluen bidez eta dokumentuetan oinarritutakoen bidez azaldu dira. Salbuespenen kudeaketa kendu egin da, azalpenak argiagoak izateko. Zenbait termino (liburutegia edo direktorioa, scriptak edo moduluak) elkar trukagarriak dira. Python makro bat modulu baten barruan dagoen funtzio bat da.

warning

Kontuan izan /Scripts/python/pythonpath direktorio lokala beti arakatzen dela /Scripts/python bideko Python makro bat exekutatzen denean.


Fitxategi-sistemako moduluak inportatzea

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.

Erabiltzailearen moduluak edo modulu partekatuak

Python script pertsonalak eta partekatuak inportatzeko, haien direktorioek Pythonen exekuzio-garaiaren bide-izenean egon behar dute. Ikus Saioaren informazioa eskuratzea orria falta diren saio-klaseen inguruko xehetasun gehiago ezagutzeko.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import sys
            
        user_lib = Session().UserPythonScripts  # Erabiltzaile-scripten kokalekua
        if not user_lib in sys.path:
            sys.path.insert(0, user_lib)  # Gehitu bilaketa-bideari
        import screen_io as ui  # 'screen_io.py' modulua user_lib direktorioan dago
        # Zure kodea hemen doa
    

Python adibide honek XSCRIPTCONTEXT aldagai bat inportatutako modulu bati erakusten dio:


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import uno, sys
            
        share_lib = Session.SharedPythonScripts()  # Partekatutako scripten kokalekua
        if not share_lib in sys.path:
            sys.path.insert(0, share_lib)  # Gehitu bilaketa-bideari
        from IDE_utils import ScriptContext  # 'IDE_utils.py' partekatutako Python scriptekin dago.
        XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
        # Zure kodea hemen doa
    

Instalaziorako moduluak aplikazioetarako

Script pertsonal eta partekatuak ez bezala, LibreOffice instalazio scriptak edozein unetan inportatu daitezke. uno & unohelper LibreOffice Python moduluen ondoan, /program direktorioan dauden beste script batzuk zuzenean inportatu daitezke, adibidez msgbox modulua.

Python kontsolarekin:

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

Dokumentuko modulua inportatzea

Dokumentu batean kapsulatutako Python modulu bat inportatzea azaltzen da behean. Erroreen maneiua ez da azaltzen. Pythonen exekuzio-garaiko bide-izena eguneratu egiten da dokumentua ireki denean eta itxi baino lehen. Ikus Gertaeren mendeko makroak Python makroak dokumentu-gertaerekin nola lotu ikasteko.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
            
        import sys, uno
            
        def OnDocPostOpenLoadPython():
            """ Prestatu Python moduluen inportazioa dok. kargatzen denean """
            PythonLibraries.loadLibrary('lib/subdir')  # Gehitu direktorioa bilaketa-bidera
            PythonLibraries.loadLibrary('my_gui', 'screen_io')  # Gehitu direktorioa eta inportatu screen_io
            
        def OnDocQueryCloseUnloadPython():
            """ Garbitu PYTHON_PATH dok. ixten denean """
            PythonLibraries.unloadLibrary('my_gui')  # Pythonen exekuzio-garaiko bide-izena garbitzea
            # Oharra: Adibide honetan, inportatutako moduluek kargatuta jarraitzen dute.
            
        class PythonLibraries():
            """ Python liburutegien kargatzailea eta moduluen inportatzailea
            
            Hubert Lambert garatzailearen 'Bibliothèque de fonctions' lanetik moldatua
            https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
            def isImportedModule(module_name: str) -> bool:
                """ Egiaztatu exekuzio-garaiko moduluen zerrenda """
                return (module_name in sys.modules.keys())
            def isLoadedLibrary(lib_name: str) -> bool:
                """ Egiaztatu PYTHON_PATH edukia """
                return (lib_name in sys.path)
            def loadLibrary(lib_name: str, module_name=None):
                """ gehitu direktorioa PYTHON_PATH bideari, inportatu izendun modulua """
                doc = XSCRIPTCONTEXT.getDocument()
                url = uno.fileUrlToSystemPath(
                    '{}/{}'.format(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):
                """ kendu direktorioa PYTHON_PATH aldagaitik """
                sys.path.remove(lib_name)
            
        g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)
    

Emaguzu laguntza!