Програмиране със скриптове на Python

Макросът на Python е функция в .py файл, идентифициран като модул. За разлика от LibreOffice Basic и десетките му обекти, функции и услуги на UNO, макросите на Python използват единичния обект XSCRIPTCONTEXT на UNO, също като JavaScript и BeanShell. В глобалния кортеж g_exportedScripts изрично се изброяват избираемите макроси от даден модул. Модулите на Python съдържат автономна програмна логика и са независими един от друг.

Глобална променлива XSCRIPTCONTEXT

Оригиналните средства за работа с UNO на Basic могат да бъдат достигнати чрез глобалната променлива XSCRIPTCONTEXT. Вижте документацията на LibreOffice API за пълно описание на XSCRIPTCONTEXT. Ето обобщение на методите на XSCRIPTCONTEXT:

Методи

Описание

Съответствие в Basic

getDocument()

Псевдонимът на документ, върху който може да действа скриптът.

ThisComponent

getDesktop()

Псевдонимът на работен плот, върху който може да действа скриптът.

StarDesktop

getComponentContext()

Контекстът на компонент, който скриптът може да използва за създаване на други компоненти на UNO.

GetDefaultContext


Споделените в рамките на инсталацията скриптове HelloWorld и Capitalise илюстрират как свързаните с UNO макроси използват глобалната променлива XSCRIPTCONTEXT.

tip

При стартиране на макроси на Python от менюто Инструменти - Макроси - Стартиране на макрос не е достъпен стандартният файл за изход на Python. Вижте Вход/изход към екрана за повече информация.


Импортиране на модули

warning

XSCRIPTCONTEXT не се предоставя на импортирани модули.


Библиотеките на LibreOffice Basic съдържат класове, подпрограми и променливи, а модулите на Python – класове, функции и променливи. Общите части с многократно използваема функционалност на Python или UNO трябва да се съхраняват в Моите макроси в (потребителски профил)/Scripts/python/pythonpath. Библиотеките на Python помагат за организирането на модулите с цел да се избегнат конфликти в имената на модули. Импортирайте uno.py в споделените модули.

Оригиналният интерфейс за UNO на BASIC е достижим посредством модула uno.py. Използвайте интерактивната обвивка на Python, за да получите пълно описание на модула чрез командите dir() и help().

Функции

Описание

Съответствие в Basic

absolutize()

Връща абсолютен URL адрес от дадени URL адреси.

createUnoStruct()

Създава структура или изключение на UNO, указано от typeName.

CreateUNOStruct()

fileUrlToSystemPath()

Връща системен път.

ConvertFromURL()

getClass()

Връща класа на конкретно изключение, структура или интерфейс на UNO.

getComponentContext()

Връща контекста на компонент на UNO, използван за инициализиране на средата за изпълнение на Python.

GetDefaultContext()

Enum()

getConstantByName()

Намира стойността на IDL константа по изричното ѝ име.

Вижте групите от константи на API

isInterface()

Връща True, когато obj е клас на интерфейс на UNO.

systemPathToFileUrl()

Връща файлов URL адрес за дадения системен път.

ConvertToURL()


Споделените за инсталацията скриптове LibreLogo и TableSample използват модула uno.py.

Още примери за връзка Python-Basic

Python UNO

Основна функционалност на UNO

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

obj = smgr.createInstanceWithContext( .. , ctx)

CreateUnoService()

Вижте Отваряне на диалогов прозорец

CreateUnoDialog()

Вижте Създаване на слушател

CreateUnoListener()

Вижте „Типове от данни на UNO“

CreateUnoValue()

CreateObject()

EqualUnoObjects()

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

GetProcessServiceManager()

def hasUnoInterfaces(obj, *interfaces):

return set(interfaces).issubset(t.typeName for t in obj.Types)

HasUnoInterfaces()

IsUnoStruct()

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

DESK = 'com.sun.star.frame.Desktop'

desktop = smgr.createInstanceWithContext(DESK , ctx)

StarDesktop

desktop = smgr.createInstanceWithContext(DESK , ctx)

doc = desktop.CurrentComponent

ThisComponent


Импортиране на вграден модул

Подобно на LibreOffice Basic, който поддържа преглеждане и динамично зареждане на библиотеки, библиотеките на Python могат да бъдат преглеждани и зареждани при поискване. За повече информация относно библиотечните контейнери вижте интерфейса за приложно програмиране (API) на LibreOffice или изтеглете софтуерния развоен пакет (SDK) на LibreOffice.

По-долу е илюстрирано импортирането на вграден в документ модул на Python, обработката на изключения не е показана:


            import uno, sys
            
            def load_library(library_name: str, module_name=None):
                """ зареждане на библиотеката и импортиране на модула
                
                Адаптирано от „Bibliothèque de fonctions“ от Юбер Ламбер (Hubert Lambert)
                на адрес https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # текущ документ
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path:  # добавяме път, ако е необходимо
                    sys.path.insert(0, url)  # doclib е с предимство
                if module_name:  # импорт, ако е поискан
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # добавяме <библиотека> път + импорт <модул>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros
        

Моля, подкрепете ни!