Как привязать скрипт написанный на Python кнопке на панели инструментов?

Автор vcomp71, 26 июля 2023, 16:05

0 Пользователи и 1 гость просматривают эту тему.

vcomp71

Если ли какой-нибудь элегантный способ, чтобы привязать выполнение функции привязать к кнопке на панели инструментов? 
В помощи написано следующее, вроде можно запустить из кода Bacsic
https://help.libreoffice.org/6.4/km/text/sbasic/guide/basic_2_python.html?&DbPAR=BASIC&System=Unknown%20OS
Option Explicit

Public Function GetPythonScript(macro As String, _
        Optional location As String) As com.sun.star.script.provider.Xscript
    ''' Grab Python script object before execution
    ' Arguments:
    '    macro   : as "library/module.py$macro" or "module.py$macro"
    '    location: as "document", "share", "user" or ENUM(eration)
    ' Result:
    '    located com.sun.star.script.provider.XScript UNO service'''
    If IsMissing(location) Then location = "user"
    Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
    Dim sp As Object ' com.sun.star.script.provider.XScriptProvider compatible
    Dim uri As String
    If location="document" Then
        sp = ThisComponent.getScriptProvider()
    Else
        mspf = CreateUNOService("com.sun.star.script.provider.MasterScriptProviderFactory")
        sp = mspf.createScriptProvider("")
    End If
    uri = "vnd.sun.star.script:"& macro &"?language=Python&location="& location
    GetPythonScript = sp.getScript(uri)
End Function ' GetPythonScript
Что должны означать параметры macro и location

mikekaganski

Цитата: vcomp71 от 26 июля 2023, 16:05Что должны означать параметры macro и location

Цитата: vcomp71 от 26 июля 2023, 16:05    ' Arguments:
    '    macro  : as "library/module.py$macro" or "module.py$macro"
    '    location: as "document", "share", "user" or ENUM(eration)
С уважением,
Михаил Каганский

economist

Цитата: vcomp71 от 27 июля 2023, 10:47Представишь рабочий скрипт
Повежливее, пожалуйста. Так помощь не просят.

Элегантные способы запустить Python-макрос:

1. Панель инструментов: Сервис - Настройка - Панели... - Макрокоманды - Выбрать
2. Горячая клавиша: Сервис - Настройка - Клавиши - Клавиатура - Категория - Макрокосы LibreOffice - Назначить
3. Кнопка в документе: Рисуем кнопку - ПКМ по кнопке - Свойства эл - События - [...] - Выбрать py-макрос
4. Поле (серая текстовая кнопка) в документе Writer: Ctrl+F2 - Функции - Выполнить макрос - Макрос...   
5. Из Basic макроса: ищем на Форуме примеры по слову invoke

Конечно, все не так просто. Сам макрос должен быть заранее положен в libreoffice\share\Scripts\python
Это должен быть *.py файл в котором есть UDF-функции (они станут именами "макросов" в п. 1-5), нужные импорты и константы (аргументы для UDF). Если же аргументы нужно задавать интерактивно или брать из документа - то простые методы 1-4 обычно заменяются 5-м, с передачей аргументов методу invoke(). Сложные вызовы как в #0 могут быть нужны если макрос должен понимать контекст выполнения, изменять сам документ, лежать в другом месте итд.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...