ການນຳເຂົ້າໂມດູນ Python

ສະຄຣິບ Python ໃນ LibreOffice ມີສາມຮູບແບບຄື: ສ່ວນຕົວ, ແບບແບ່ງປັນ ຫຼື ແບບຝັງຢູ່ໃນເອກະສານ. ພວກມັນຖືກເກັບໄວ້ໃນບ່ອນຕ່າງໆ ຕາມທີ່ອະທິບາຍໃນ ການຈັດລະບຽບ ແລະ ຕຳແໜ່ງຂອງສະຄຣິບ Python. ເພື່ອນຳເຂົ້າໂມດູນ Python, ລະບົບ Python ຕ້ອງຮູ້ຕຳແໜ່ງຂອງພວກມັນໃນລະຫວ່າງການຣັນ.

ກົນໄກນີ້ສະແດງໃຫ້ເຫັນທັງໂມດູນທີ່ຢູ່ໃນລະບົບໄຟລ໌ ແລະ ໂມດູນໃນເອກະສານ. ການຈັດການຂໍ້ຜິດພາດແມ່ນໄດ້ຂ້າມໄປເພື່ອຄວາມຊັດເຈນ. ຄຳວ່າ ໄລບຣາຣີ ຫຼື ໄດເຣັກທໍຣີ, ສະຄຣິບ ຫຼື ໂມດູນ ແມ່ນຖືກໃຊ້ແທນກັນໄດ້. ແມັກໂຄຣ Python ໝາຍເຖິງຟັງຊັນທີ່ຢູ່ພາຍໃນໂມດູນ.

ໄອຄອນ ຄຳເຕືອນ

ໝາຍເຫດ: ໄດເຣັກທໍຣີ <User Profile>/Scripts/python/pythonpath ຈະຖືກກວດສອບສະເໝີເມື່ອຣັນແມັກໂຄຣ Python ຈາກ <User Profile>/Scripts/python.


ການນຳເຂົ້າໂມດູນຈາກລະບົບໄຟລ໌

ໄລບຣາຣີຂອງ LibreOffice Basic ປະກອບມີຄລາສ, ຣູທິນ ແລະ ຕົວປ່ຽນ, ສ່ວນໂມດູນ Python ປະກອບມີຄລາສ, ຟັງຊັນ ແລະ ຕົວປ່ຽນ. ສ່ວນປະກອບ Python ທີ່ໃຊ້ຄືນໄດ້ຄວນເກັບໄວ້ໃນ ແມັກໂຄຣຂອງຂ້ອຍ ພາຍໃຕ້ pythonpath. ໃຫ້ນຳເຂົ້າ uno.py ພາຍໃນໂມດູນທີ່ໃຊ້ຮ່ວມກັນ.

ໂມດູນຂອງຜູ້ໃຊ້ ຫຼື ແບບແບ່ງປັນ

ສະຄຣິບ Python ສ່ວນຕົວ ແລະ ແບບແບ່ງປັນສາມາດນຳເຂົ້າມາໄດ້ ເມື່ອໄດເຣັກທໍຣີຂອງພວກມັນຖືກລວມຢູ່ໃນເສັ້ນທາງການຣັນຂອງ Python. ເບິ່ງໜ້າ ການດຶງຂໍ້ມູນເຊດຊັນ ສຳລັບລາຍລະອຽດເພີ່ມເຕີມ.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import sys
            
        user_lib = Session().UserPythonScripts  # ຕຳແໜ່ງສະຄຣິບຂອງຜູ້ໃຊ້
        if not user_lib in sys.path:
            sys.path.insert(0, user_lib)  # ເພີ່ມໃສ່ເສັ້ນທາງການຄົ້ນຫາ
        import screen_io as ui  # ໂມດູນ 'screen_io.py' ຢູ່ໃນໄດເຣັກທໍຣີ user_lib
        # ໃສ່ລະຫັດຂອງທ່ານຕໍ່ບ່ອນນີ້
    

ຕົວຢ່າງ Python ນີ້ຈະສົ່ງຕົວປ່ຽນ XSCRIPTCONTEXT ໃຫ້ກັບໂມດູນທີ່ນຳເຂົ້າມາ:


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import uno, sys
            
        share_lib = Session.SharedPythonScripts()  # ຕຳແໜ່ງສະຄຣິບແບບແບ່ງປັນ
        if not share_lib in sys.path:
            sys.path.insert(0, share_lib)  # ເພີ່ມໃສ່ເສັ້ນທາງການຄົ້ນຫາ
        from IDE_utils import ScriptContext  # 'IDE_utils.py' ຢູ່ຮ່ວມກັບສະຄຣິບ Python ແບບແບ່ງປັນ.
        XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
        # ໃສ່ລະຫັດຂອງທ່ານຕໍ່ບ່ອນນີ້
    

ໂມດູນການຕິດຕັ້ງສຳລັບແອັບພລິເຄຊັນ

ບໍ່ຄືກັບສະຄຣິບສ່ວນຕົວ ແລະ ແບບແບ່ງປັນ, ສະຄຣິບການຕິດຕັ້ງຂອງ LibreOffice ສາມາດນຳເຂົ້າມາໄດ້ທຸກເວລາ. ນອກຈາກໂມດູນ uno ແລະ unohelper ແລ້ວ, ສະຄຣິບອື່ນໆໃນໄດເຣັກທໍຣີ <installation_path>/program ກໍສາມາດນຳເຂົ້າມາໂດຍກົງໄດ້ ເຊັ່ນ ໂມດູນ msgbox.

ດ້ວຍ Python shell:

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

ການນຳເຂົ້າໂມດູນໃນເອກະສານ

ການນຳເຂົ້າໂມດູນ Python ທີ່ຝັງໃນເອກະສານແມ່ນສະແດງໄວ້ຂ້າງລຸ່ມນີ້. ການຈັດການຂໍ້ຜິດພາດແມ່ນບໍ່ໄດ້ລະບຸລະອຽດ. ເສັ້ນທາງການຣັນຂອງ Python ຈະຖືກອັບເດດເມື່ອເປີດເອກະສານ ແລະ ກ່ອນປິດເອກະສານ. ເບິ່ງ ແມັກໂຄຣທີ່ຂັບເຄື່ອນດ້ວຍເຫດການ ເພື່ອຮຽນຮູ້ວິທີເຊື່ອມໂຍງແມັກໂຄຣ Python ກັບເຫດການຂອງເອກະສານ.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
            
        import sys, uno, zipimport
            
        def OnDocPostOpenLoadPython(event = None):
            """ ກຽມການນຳເຂົ້າໂມດູນ Python ເມື່ອໂຫຼດເອກະສານ """
            PythonLibraries.loadLibrary('lib/subdir')  # ເພີ່ມໄດເຣັກທໍຣີໃສ່ເສັ້ນທາງການຄົ້ນຫາ
            PythonLibraries.loadLibrary('my_gui', 'screen_io')  # ເພີ່ມໄດເຣັກທໍຣີ ແລະ ນຳເຂົ້າ screen_io
            
        def OnDocQueryCloseUnloadPython(event = None):
            """ ລ້າງ PYTHON_PATH ເມື່ອປິດເອກະສານ """
            PythonLibraries.unloadLibrary('my_gui')  # ລ້າງເສັ້ນທາງການຣັນຂອງ Python
            # ໝາຍເຫດ: ໂມດູນທີ່ນຳເຂົ້າມາຈະຍັງຄົງຖືກໂຫຼດຢູ່ໃນຕົວຢ່າງນີ້.
            
        class PythonLibraries():
            """ ຕົວໂຫຼດໄລບຣາຣີ ແລະ ຕົວນຳເຂົ້າໂມດູນ Python
            
            ປັບປຸງມາຈາກ 'Bibliothèque de fonctions' ໂດຍ Hubert Lambert
            ທີ່ https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
            def isImportedModule(module_name: str) -> bool:
                """ ກວດສອບລາຍການໂມດູນໃນຂະນະຣັນ """
                return (module_name in sys.modules.keys())
            def isLoadedLibrary(lib_name: str) -> bool:
                """ ກວດສອບເນື້ອຫາໃນ 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):
                """ ເພີ່ມໄດເຣັກທໍຣີໃສ່ PYTHON_PATH, ນຳເຂົ້າໂມດູນທີ່ລະບຸຊື່ """
                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):
                """ ລົບໄດເຣັກທໍຣີອອກຈາກ PYTHON_PATH """
                doc = XSCRIPTCONTEXT.getDocument()
                url = uno.fileUrlToSystemPath(
                    f'{doc.URL}/Scripts/python/{lib_name}' )
                sys.path.remove(url)
            
        g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)
    
ກະລຸນາສະໜັບສະໜູນພວກເຮົາ!

ກະລຸນາສະໜັບສະໜູນພວກເຮົາ!