Περιεχόμενα

# Εισαγωγή αρθρωμάτων Python

Οι δέσμες ενεργειών Python του LibreOffice έρχονται σε τρεις διαφορετικές εκδόσεις, μπορούν να εξατομικευτούν, να μοιραστούν ή να ενσωματωθούν σε έγγραφα. Αποθηκεύονται σε διάφορες θέσεις που περιγράφονται στο Python Scripts Organization and Location. Για να εισάγετε αρθρώματα Python, οι τοποθεσίες τους πρέπει να είναι γνωστές από το Python κατά τον χρόνο εκτέλεσης.

Αυτός ο μηχανισμός απεικονίζεται για σύστημα αρχείου με βάση αρθρώματα και έγγραφο με βάση αρθρώματα. Ο χειρισμός εξαίρεσης παραλείπεται για σαφήνεια. Οι όροι βιβλιοθήκη ή κατάλογος, δέσμη ενεργειών ή αρθρώματα χρησιμοποιούνται εναλλακτικά. Μια μακροεντολή Python αναφέρεται σε συνάρτηση σε άρθρωμα.

Σημειώστε ότι ο τοπικός κατάλογος <User Profile>/Scripts/python/pythonpath εξερευνάται πάντα όταν εκτελείται μακροεντολή Python από το <User Profile>/Scripts/python.

## Εισαγωγή αρθρώματος συστήματος αρχείων

Οι βιβλιοθήκες Basic του LibreOffice περιέχουν κλάσεις, ρουτίνες και μεταβλητές, τα αρθρώματα Python περιέχουν κλάσεις, συναρτήσεις και μεταβλητές. Κοινά τμήματα των επαναχρησιμοποιήσιμων χαρακτηριστικών Python ή UNO πρέπει να αποθηκεύονται στις Μακροεντολές μου (My macros) στο (User Profile)/Scripts/python/pythonpath. Οι βιβλιοθήκες Python βοηθούν στην οργάνωση αρθρωμάτων για να αποτρέψουν τις διενέξεις ονομάτων αρθρωμάτων. Εισάγετε το 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 μπορεί να εισαχθεί οποτεδήποτε. Πέρα από τα αρθρώματα Python uno & unohelper του LibreOffice, άλλες δέσμες ενεργειών που εμφανίζονται στον κατάλογο <installation_path>/program μπορούν να εισαχθούν απευθείας, όπως το άρθρωμα msgbox.

Με κέλυφος Python:

>>> 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 ενημερώνεται όταν το έγγραφο έχει ανοιχθεί και πριν το κλείσιμο. Δείτε το Συμβαντοοδηγούμενες μακροεντολές (Event-Driven Macros) για να μάθετε πώς να συνδέσετε τις μακροεντολές Python με τα συμβάντα του εγγράφου.

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

            import sys, uno

            def OnDocPostOpenLoadPython():
                """ Προετοιμασία εισαγωγής αρθρωμάτων Python όταν φορτώνεται doc."""
                PythonLibraries.loadLibrary('lib/subdir')  # Προσθήκη καταλόγου στη διαδρομή αναζήτησης
                PythonLibraries.loadLibrary('my_gui', 'screen_io')  # Προσθήκη dir. & import screen_io

            def OnDocQueryCloseUnloadPython():
                """ Καθαρισμός PYTHON_PATH όταν κλείνει το doc. """
                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 """
                    return (lib_name in sys.path)
                def loadLibrary(lib_name: str, module_name=None):
                    """ προσθήκη καταλόγου στο PYTHON_PATH, εισαγωγή επώνυμου αρθρώματος """
                    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):
                    """ αφαίρεση καταλόγου από PYTHON_PATH """
                    sys.path.remove(lib_name)

            g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)

Σχετικά θέματα

Λήψη πληροφοριών συνόδου

Προγραμματισμός με σενάρια Python

Οργάνωση και θέση σεναρίων Python

Δείτε το Δημιουργία ακρόασης Python (Creating a Python Listener) για παραδείγματα συμβαντοεξαρτώμενων μακροεντολών.