[Gelöst] Python: Embedded Dialogdefinition: Wie wird einem Kontrollelement eine Python-Funktion zugewiesen?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

preklov
***
Beiträge: 76
Registriert: Mo, 29.06.2009 09:04
Wohnort: Ruhrgebiet

[Gelöst] Python: Embedded Dialogdefinition: Wie wird einem Kontrollelement eine Python-Funktion zugewiesen?

Beitrag von preklov »

Situation: Im Dokument eingebettet:
- in der Basic-IDE erstellte Dialogdefinitionen, z.B. Dialogs/Standard/BatchFillDialog.xml (die dazu gehörenden Basic-Module sind vorerst noch in Basic/Standard/ gespeichert).
- Python-Scripts, die die Basic-Module ersetzen sollen, gespeichert in Scripts/python/start.py und toolbox.py.
- Die Scripts sind im Pfad, eine Funktion "msg_box" ist aus "toolbox.py" importiert.

Ich versuche, die Zuweisung eines Makros zu einem Dialogbutton in der Dialog-xml-Datei zu ändern. Dort steht:

Code: Alles auswählen

<dlg:button dlg:id="CBFill" dlg:tab-index="6" dlg:left="300" dlg:top="295" dlg:width="60" dlg:height="15" dlg:value="Ausfüllen">
   <script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Standard.Batches.OnClickFill?language=Basic&location=document" script:language="Script"/>
  </dlg:button>
Ich will nun den Eintrag script:event so ändern, dass die Python-Funktion on_ok_test (in start.py) gestartet wird. Sie soll nur "OK" ausgeben:

Code: Alles auswählen

def on_ok_test(*args):
    msg_box(doc, 'OK', 'Test', INFOBOX)
Ich versuche also:

Code: Alles auswählen

<script:event script:event-name="on-performaction" script:macro-name="vnd.sun.star.script:Scripts.python.start.on_ok_test?language=Python&location=document" script:language="Script"/>
Der Dialog wird über die Funktion dialog_example() aufgerufen:

Code: Alles auswählen

def dialog_example():
    ctx = XSCRIPTCONTEXT.getComponentContext()
    smgr = ctx.getServiceManager()
    dp = smgr.createInstanceWithArguments("com.sun.star.awt.DialogProvider", tuple([doc]))
    dialog = dp.createDialog('vnd.sun.star.script:Standard.BatchFillDialog?location=document')
    dialog.execute()
    dialog.dispose()
Wenn ich aber auf den Button "Ausfüllen" klicke, geschieht nichts.

Zwar kann ich im Netz Beispiele für script:event-name finden (an denen ich mich orientiert habe), aber leider keine für script:language. Wenn ich dort z.B. "Python" verwende, wird der Dialog erst gar nicht geöffnet. Er läuft auf eine Exception.

Natürlich habe ich verschiedene Namenspfadvarianten ausprobiert. Es gelingt mir nicht.

Was läuft da falsch? Oder ist schon der Ansatz falsch?

Volker
Zuletzt geändert von preklov am So, 22.11.2015 15:00, insgesamt 1-mal geändert.
Schöne Grüße
Volker
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Python: Embedded Dialogdefinition: Wie wird einem Kontrollelement eine Python-Funktion zugewiesen?

Beitrag von F3K Total »

Na,
einfach im Entwurfsmodus Rechtsklick auf das Kontrollelement/Kontrollfeld .../Reiter Ereignisse und über die drei kleinen Punkte zuweisen.
Danach kannst Du die .xml untersuchen ...
Gruß R
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Python: Embedded Dialogdefinition: Wie wird einem Kontrollelement eine Python-Funktion zugewiesen?

Beitrag von Karolus »

Hallo
... Er läuft auf eine Exception.
Und die lautet ??

___
Hast das zunächst schonmal, komplett ohne Einbettung ins Document lauffähig gehabt?
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
preklov
***
Beiträge: 76
Registriert: Mo, 29.06.2009 09:04
Wohnort: Ruhrgebiet

Re: Python: Embedded Dialogdefinition: Wie wird einem Kontrollelement eine Python-Funktion zugewiesen?

Beitrag von preklov »

Der Tipp von F3K Total war klasse. Warum fällt mir so etwas nicht selber ein?

Und tatsächlich war es die eine Pfadkombination, die ich nicht probiert hatte. Ich hatte es mit und ohne "Scripts", mit und ohne "python", mit und ohne "$", mit und ohne ".py" versucht, nur nicht mit folgender:

Code: Alles auswählen

script:macro-name="vnd.sun.star.script:start.py$on_ok_test?language=Python&location=document"
An Karolus: Fehlermeldung:

com.sun.star.uno.RuntimeException
(Error during invoking function dialog_example in module
vnd.sun.star.tdoc:/1/Scripts/python/start.py
(<class 'uno.com.sun.star.uno.RuntimeException'>:
vnd.sun.star.tdoc:/1/Scripts/python/start.py:89
in function dialog_example() [None]
/opt/openoffice4/program/pythonscript.py:866
in function invoke() [ret=self.func(*args)] ))

Danke.
Volker
Schöne Grüße
Volker
Antworten