Importuojant „Python“ modulius

„LibreOffice Python“ skriptai yra trijų skirtingų rūšių, jie gali būti asmeniniai, bendrinami ar įterpti į dokumentus. Jie laikomi skirtingose vietose, aprašytose „Python“ skriptų organizavimas ir vieta . Norint importuoti „Python“ modulius, vykdymo metu iš „Python“ turi būti žinomos jų vietos.

Šis mechanizmas iliustruojamas failų sistemos moduliais ir dokumentais pagrįstais moduliais. Dėl aiškumo išimtys neaptariamos. Sąvokos biblioteka ar katalogas, skriptai ar moduliai vartojami pakaitomis. „Python“ makrokomanda reiškia funkciją modulio viduje.

warning

Pastebėkite, kad <User Profile>/Scripts/python/pythonpath lokalus aplankas visuomet tyrinėjams, kai vykdoma „Python“ makrokomanda naudojant <User Profile>/Scripts/python.


Failo sistemos modulio importavimas

„LibreOffice Basic“ bibliotekose yra klasės, paprogramės ir kintamieji, „Python“ moduliuose yra klasės, funkcijos ir kintamieji. Įprastos daugkartinio naudojimo „Python“ ar UNO funkcijų savybės turi būti laikomos naudojant Mano makrokomandos (vartotojo profilis)/Scripts/python/pythonpath. „Python“ bibliotekos padeda organizuoti modulius, kad būtų išvengta modulių pavadinimų persidengimo. Importuokite uno.py į bendrinamus modulius.

Vartotojo ar bendrinami moduliai

Asmeninius ir bendrinamus „Python“ skriptus galima importuoti, kai jų katalogai bus įtraukti į „Python“ vykdymo kelią. Daugiau informacijos apie praleistą „Session Class“ rasite tinklalapyje Seanso informacijos gavimas.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import sys
            
        user_lib = Session().UserPythonScripts  # Vartotojo skriptų vieta
        if not user_lib in sys.path:
            sys.path.insert(0, user_lib)  # Pridėti ieškomą kelią
        import screen_io as ui  # 'screen_io.py' modulis yra user_lib kataloge
        #  Jūsų kodas eina čia
    

Šis „Python“ pavyzdys pateikia vietinį XSCRIPTCONTEXT kintamąjį importuotam moduliui:


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import uno, sys
            
        share_lib = Session.SharedPythonScripts()  # Bendrinamų skriptų vieta
        if not share_lib in sys.path:
            sys.path.insert(0, share_lib)  # Pridėti ieškomą kelią
        iš IDE_utils import ScriptContext  # 'IDE_utils.py' eina su bendrinamu „Python“ scriptu.
        XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
        # Jūsų kodas eina čia
    

Programos diegimo moduliai

Skirtingai nuo asmeninių ir bendrinamų scenarijų, „% PRODUCTNAME“ diegimo skriptus galima importuoti bet kuriuo metu. Šalia uno & unohelper „LibreOffice Python“ modulių galima tiesiogiai importuoti kitus skriptus, esančius kataloge <installation_path>/program, pvz., kaip šio msgbox modulio.

Esant „Python“ apvakalui

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

Importuojamas dokumento modulis

Toliau pavaizduotas įterptojo „Python“ dokumento modulio importavimas. Klaidų tvarkymas nėra išsamus. „Python“ vykdymo kelias atnaujinamas atvėrus dokumentą ir prieš jį užveriant. Norėdami sužinoti, kaip susieti „Python“ makrokomandas su dokumentų įvykiais, žr. Įvykiais valdomos makrokomandos.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
            
        import sys, uno
            
        def OnDocPostOpenLoadPython():
            """ Paruoškite „Python“ modulių importavimą, kai doc. įkraunamas """
            PythonLibraries.loadLibrary('lib/subdir')  # Ieškomam keliui pridėti katalogą
            PythonLibraries.loadLibrary('my_gui', 'screen_io')  # Pridėti dir. & import screen_io
            
        def OnDocQueryCloseUnloadPython():
            """ Išvalykite PYTHON_PATH, kai doc. užveriamas """
            PythonLibraries.unloadLibrary('my_gui')  # Python vykdymo kelio valymas
            # Pastaba: šiame pavyzdyje importuoti moduliai lieka įkelti.
            
        class PythonLibraries():
            "" "" Python bibliotekos įkrovimo programa ir modulių importuvas
            
            'Bibliothèque de fonctions' adaptavo Hubert Lambert
            Prieiga: https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
            def isImportedModule(module_name: str) -> bool:
                """ Patikrinkite vykdymo laiko modulių sąrašą """
                return (module_name in sys.modules.keys())
            def isLoadedLibrary(lib_name: str) -> bool:
                """ Patikrinkite PYTHON_PATH turinį """
                return (lib_name in sys.path)
            def loadLibrary(lib_name: str, module_name=None):
                """ pridėti katalogą prie PYTHON_PATH, importuoti įvardintą modulį """
                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):
                """ pašalinti katalogą iš PYTHON_PATH """
                sys.path.remove(lib_name)
            
        g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)
    

Paremkite mus!