Turinys

# 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.

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, zipimport

            def OnDocPostOpenLoadPython(event = None):
                """ 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(event = None):
                """ 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į """
                    url = uno.fileUrlToSystemPath(
                        f'{doc.URL}/Scripts/python/{lib_name}' )
                    return (url 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(
                        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):
                    """ pašalinti katalogą iš PYTHON_PATH """
                    doc = XSCRIPTCONTEXT.getDocument()
                    url = uno.fileUrlToSystemPath(
                        f'{doc.URL}/Scripts/python/{lib_name}' )
                    sys.path.remove(url)

            g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)

Susijusios temos

Gauti sesijos informaciją

Programavimas naudojant „Python“ skriptus

„Python“ skriptų organizavimas ir vieta

Nuoroda į Sukurti Python klausytojus įvykiai valdomų makrokomandų pavyzdžiams.