[Gelöst] Python: Embedded Dialogdefinition: Wie wird einem Kontrollelement eine Python-Funktion zugewiesen?
Verfasst: So, 22.11.2015 13:27
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:
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:
Ich versuche also:
Der Dialog wird über die Funktion dialog_example() aufgerufen:
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
- 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>
Code: Alles auswählen
def on_ok_test(*args):
msg_box(doc, 'OK', 'Test', INFOBOX)
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"/>
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()
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