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

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [Gelöst] Python: Embedded Dialogdefinition: Wie wird einem Kontrollelement eine Python-Funktion zugewiesen?

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

von preklov » So, 22.11.2015 15:00

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

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

von Karolus » So, 22.11.2015 13:58

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

___
Hast das zunächst schonmal, komplett ohne Einbettung ins Document lauffähig gehabt?

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

von F3K Total » So, 22.11.2015 13:44

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

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

von preklov » 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:

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

Nach oben