Простой скрипт на Python для получения базового поля libreoffice и воспроизведения на vlc

Я часами ломал голову над этим, и я недостаточно хорошо понимаю API макросов LibreOffice, чтобы понять, как это сделать:

1) Этот скрипт работает на питоне:

#!/usr/bin/env python3
import subprocess 
def play_vlc(path="/path/to/video.avi"):
    subprocess.call(['vlc', path])
    return None
play_vlc("/path/to/video.avi")

2) У меня есть скрипты Python, которые отлично работают в LibreOffice Base, и этот скрипт запускается при нажатии кнопки. Видео открывается (с ошибкой - см. ниже)

Теперь, как открыть путь, найденный в поле данной записи с пометкой «путь», т. е. что передается в python, и как мне получить этот соответствующий бит информации?

Кроме того, всякий раз, когда я запускаю это, видео воспроизводится, но я также получаю:

com.sun.star.uno.RuntimeExceptionError during invoking function play_vlc in module file:///usr/lib/libreoffice/share/Scripts/python/vlc.py (<class 'TypeError'>: Can't convert 'com.sun.star.lang.EventObject' object to str implicitly
  /usr/lib/python3.5/subprocess.py:1480 in function _execute_child() [restore_signals, start_new_session, preexec_fn)]
  /usr/lib/python3.5/subprocess.py:947 in function __init__() [restore_signals, start_new_session)]
  /usr/lib/python3.5/subprocess.py:557 in function call() [with Popen(*popenargs, **kwargs) as p:]
  /usr/lib/libreoffice/share/Scripts/python/vlc.py:8 in function play_vlc() [subprocess.call(['vlc', path])]
  /usr/lib/libreoffice/program/pythonscript.py:870 in function invoke() [ret = self.func( *args )]
)

Пожалуйста помоги!


person Trees4theForest    schedule 11.07.2016    source источник
comment
Кажется, что ваш path содержит не строку, а com.sun.star.lang.EventObject. Как насчет того, чтобы опубликовать код, где на самом деле происходит ошибка? Публикация работающего кода не очень полезна для отладки.   -  person Aran-Fey    schedule 11.07.2016
comment
привет, роулинг - это код именно такой, каким он выглядит. что-то передается функции (я думаю), которая вызывает эту ошибку - по иронии судьбы, я подозреваю, что это информация, которая мне нужна, чтобы получить нужный мне путь, но я не могу быть уверен...   -  person Trees4theForest    schedule 11.07.2016


Ответы (1)


Например, скажем, форма основана на таблице, содержащей столбец с именем PATH. Назначьте этой функции событие Execute action кнопки:

def playvlc_button_pressed(oEvent):
    oForm = oEvent.Source.getModel().getParent()
    lNameCol = oForm.findColumn('PATH')
    sPath = oForm.getString(lNameCol)
    play_vlc(sPath)

Документация по базовым макросам сбивает с толку, но некоторые из них есть по адресу: http://www.pitonyak.org/database/< /а>

person Jim K    schedule 11.07.2016
comment
+1 за документацию сбивает с толку ... Я занимаюсь этим уже несколько недель и до сих пор не могу найти, как получить элемент x из формы y в любой соответствующей ситуации. Все предполагает, что вы волшебным образом знали об этом... - person Trees4theForest; 12.07.2016