Macros/Guía de Python/Funciones útiles
< Macros | Python Guide
TDF LibreOffice en español Document Liberation Project Blogs comunitarios Weblate Nextcloud Redmine Preguntas y respuestas Donar
Funciones comunes y útiles
En muchos ejemplos de esta Guía de Python podremos usar una o más de las siguientes funciones.
Creación de instancias
import uno
CTX = uno.getComponentContext()
SM = CTX.getServiceManager()
def create_instance(name, with_context=False):
if with_context:
instance = SM.createInstanceWithContext(name, CTX)
else:
instance = SM.createInstance(name)
return instance
Obtener el escritorio
- Una manera
import uno
desktop = XSCRIPTCONTEXT.getDesktop()
- Creación de instancia
desktop = create_instance('com.sun.star.frame.Desktop', True)
- Mejor usar para ser llamada desde otras macros
def get_desktop():
return create_instance('com.sun.star.frame.Desktop', True)
Llamar al despachador
- Muchas funciones de LibreOffice solo pueden ejecutarse con un despachador
def call_dispatch(doc, url, args=()):
frame = doc.getCurrentController().getFrame()
dispatch = create_instance('com.sun.star.frame.DispatchHelper')
dispatch.executeDispatch(frame, url, '', 0, args)
return
- Por ejemplo, la orden Copiar
doc = XSCRIPTCONTEXT.getDocument()
call_dispatch(doc, '.uno:Copy')
Ventana de mensajes
from com.sun.star.awt import MessageBoxButtons as MSG_BUTTONS
def msgbox(message, title='LibreOffice', buttons=MSG_BUTTONS.BUTTONS_OK, type_msg='infobox'):
""" Create message box
type_msg: infobox, warningbox, errorbox, querybox, messbox
https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1awt_1_1XMessageBoxFactory.html
"""
toolkit = create_instance('com.sun.star.awt.Toolkit')
parent = toolkit.getDesktopWindow()
mb = toolkit.createMessageBox(parent, type_msg, buttons, title, str(message))
return mb.execute()
Ejecutar en otro hilo
import threading
def run_in_thread(fn):
def run(*k, **kw):
t = threading.Thread(target=fn, args=k, kwargs=kw)
t.start()
return t
return run
- Ahora puede ejecutar cualquier macro en otro hilo
@run_in_thread
def main():
return
Diccionario de propiedades
from com.sun.star.beans import PropertyValue
def dict_to_property(values, uno_any=False):
ps = tuple([PropertyValue(Name=n, Value=v) for n, v in values.items()])
if uno_any:
ps = uno.Any('[]com.sun.star.beans.PropertyValue', ps)
return ps
Get color
def get_color(red, green, blue):
color = (red << 16) + (green << 8) + blue
return color