Elementare Frage zu Python in OO

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

Moderator: Moderatoren

Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Elementare Frage zu Python in OO

Beitrag von Stephan »

Hallo,

ist es tatsächlich nicht möglich über den Dialog Extras-Makros-Makros verwalten-Python... die entsprechenden, selbst erstellen, Python Scripts zu Bearbeiten, Umzubenennen, zu Erstellen, zu Löschen? (so beobachtet in OOo 3.3.0 und AOO 4.0.1)
Mir ist schon klar das die Bearbeitungsfunktion/Editorfenster, wenn es sie gibt, rudimentär ist, nur es nervt ständig im Python-Verzeichnis von OO 'rumstochern' zu müssen nur weil ich mich schnell vom Inhalt eines Scripts informieren will.


Gruß
Stephan
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Elementare Frage zu Python in OO

Beitrag von Karolus »

Hallo Stephan

Über den "eingebauten" Extras-Makros-Makros verwalten-Python nicht wirklich, lediglich '→Bearbeiten lässt sich aktivieren indem du in der Datei pythonscript.py im Progrmmordner Zeile ~52 editierst

Code: Alles auswählen

-ENABLE_EDIT_DIALOG=False
+ENABLE_EDIT_DIALOG=True 
Damit ist →bearbeiten zwar aktiv aber ein Editor öffnet sich damit trotzdem nicht .

Wesentlich weiter kommst du mit hanya's Dialog
Hanya lässt dort aber auch die zuständige Funktion exec_edit() (~ Zeile 615 ) leer, und überlässt dir die individuelle Implementierung.
Ich hatte den Teil mal so gelöst:

Code: Alles auswählen

...
    def exec_edit(self, tree_node, node):
        """
        edit selected node :
        if Script is embedded into Document do first
        copy to project-path and edit there.
        the Routine for copy back should called after edit
        from your Python-IDE
        """
        if (isinstance(node, pythonscript.ScriptBrowseNode ) or
            isinstance(node, pythonscript.FileBrowseNode ) ):
            uri = node.uri

            if node.uri.startswith(self.DOC_PROTOCOL) :
                sfa = node.provCtx.sfa
                tail, fname = path.split(uri.split(':/',1)[1])
                projectfolder = path.join(projectpath, tail)
                projecturl = path.join(projectfolder, fname)
                if not path.exists(projectfolder):
                    makedirs( projectfolder)
                sfa.copy(uri, projecturl )
                call([pycharm, projecturl])
                return

            call([pycharm, uno.fileUrlToSystemPath(uri)])
...
 
call ist die gleichnamige Funktion importiert aus subprocess
path -dito- importiert aus os
hinter pycharm steckt der Pfad zur IDE



Letzlich ist es eigentlich bequemer stets eine IDE-sitzung parallel zu AO|Lo offen zu haben und die Scripte von da aus zu bearbeiten.

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Elementare Frage zu Python in OO

Beitrag von Stephan »

Hallo Karolus,

vielen Dank für die sehr ausführliche Antwort. Den Code bzw. Skriptverwaltungsdialog muss ich mir erst noch genauer anschauen.

Ich bin bei Python praktisch völliger Anfänger und habe mich zwar schon in der Vergangenheit damit beschäftigt einzelne fertige Skripte anzupassen habe jetzt aber begonnen das von Anfang an zu lernen und bin völlig am Anfang, so bei print 3+4.
Letzlich ist es eigentlich bequemer stets eine IDE-sitzung parallel zu AO|Lo offen zu haben und die Scripte von da aus zu bearbeiten.
Ja klar.

Hier gleich die Frage was schlägst Du mir denn vor?
Ich hatte mich kurz informiert, aber als ich dann was von Eclipse (PyDev) las, habe ich das erstmals gelassen (naja, ich kenne Eclipse von anderen Sachen ein wenig und finde das ziemlich komplex) und beschlossen das mir für die nächste Zeit Notepad++ reicht, denn ich habe momentan nur stundenweise Zeit und werde wohl die nächsten Wochen brauchen um mich durch die Grundlagen zu arbeiten und einigermaßen Routine zu entwickeln.


Gruß
Stephan
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Elementare Frage zu Python in OO

Beitrag von Stephan »

Hanya lässt dort aber auch die zuständige Funktion exec_edit() (~ Zeile 615 ) leer, und überlässt dir die individuelle Implementierung.
Ich hatte den Teil mal so gelöst:
ich habe das so übernommen und nur die 2 Zeilen:

Code: Alles auswählen

	call([pycharm, projecturl])

call([pycharm, uno.fileUrlToSystemPath(uri)])
geändert in:

Code: Alles auswählen

	call([uno.fileUrlToSystemPath("C:\Program Files\Notepad++\notepad++.exe"), projecturl])

call([uno.fileUrlToSystemPath("C:\Program Files\Notepad++\notepad++.exe"), uno.fileUrlToSystemPath(uri)])
oder auch:

Code: Alles auswählen

	call(["C:\Program Files\Notepad++\notepad++.exe", projecturl])

call(["C:\Program Files\Notepad++\notepad++.exe", uno.fileUrlToSystemPath(uri)])
Aber weder habe ich im erscheinenden Dialog irgendwas womit ich den Editor starten kann (Schaltfläche, Kontextmenü etc.), noch kommt irgendein Fehler.


Falls das Ganze leicht zum Laufen zu bewegen wäre sag mir bitte wie, falls es mehr Arbeit machen sollte, lass es sein, es ist im Moment nicht sooo wesentlich, auch weil ich für mich selbst vom Kurs abweiche Python richtig lernen zu wollen und hier bereits wieder in einem Code herumexperimentiere den ich eigentlich nicht verstehe.


Gruß
Stephan
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Elementare Frage zu Python in OO

Beitrag von Karolus »

Hallo

Sorry ich hatte noch ein paar Details vergessen:

Im Kopf des Moduls musst du noch die Importe ergänzen:

Code: Alles auswählen

from os import path, makedirs
from subprocess import call
Danach vmtl. noch die Definition von projectpath

Code: Alles auswählen

projectpath = 'C:/Dokumente und Einstellungen/ ...  /user/Scripts/python/' 
# der pfad zu deinem OO-benutzer-verzeichnis         
und der Pfad zur Notepad++.exe :

Code: Alles auswählen

notepad = "C:/Program Files/Notepad++/notepad++.exe" 
Anmerkung: python versteht auch unter Windows Dateipfade mit /Slashes richtig,
verwende "C:/...." oder r"C:\...."
ohne r'-prefix' musst du sämtliche \backslashes verdoppeln damit nicht zB. '\t' im Pfad als Tabulatorzeichen oder '\n' als Zeilenumbruch interpretiert wird.


unten in der Funktion tuts dann:

Code: Alles auswählen

       call([ notepad, projecturl])

    call([ notepad, uno.fileUrlToSystemPath(uri)])
erfolgreich getestet auf einer VM mit WindowsXP und frisch installiertem Notepad++


Hier gleich die Frage was schlägst Du mir denn vor?
Ich hatte mich kurz informiert, aber als ich dann was von Eclipse (PyDev) las, habe ich das erstmals gelassen (naja, ich kenne Eclipse von anderen Sachen ein wenig und finde das ziemlich komplex) und beschlossen das mir für die nächste Zeit Notepad++ reicht, ...
Die Frage nach der|dem "richtigen" IDE|Editor ist schwierig, fragst du drei Leute bekommst du fünf verschiedene Antworten.
Du kannst durchaus starten mit Notepad.
Empfehlen für den Anfang kann ich noch http://www.geany.org/Download/Releases

Ich selbst arbeite inzwischen viel mit der Community-version von pycharm das ist eine IDE ähnlich Eclipse(PyDev) nur ..mh.. besser/leichter zu bedienen oder zu konfigurieren.


Seit kurzem beschäftige ich mich auch mit http://ipython.org/ ursprünglich war das eigentlich nur eine aufgebohrte Python-shell aber inzwischen ist die notebook-variante u.a.*** auch als IDE nutzbar.

***ansonsten noch als interactive Shell, zum Schreiben von Programmdokumentation, WySiwyg-html-Editor.

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Elementare Frage zu Python in OO

Beitrag von Stephan »

Hallo Karolus,

das Genannte bringt mich nicht wirklich weiter.

Ich hatte gehofft das mögliche Änderungen des Skripts auch bewirken das ich überhaupt im Dialog eine Schaltfläche/Kontextmenü finde womit ich das Editieren starten kann, nur gibt es das weiterhin nicht.

Der Dialog sieht so aus:
skriptfenster.gif
skriptfenster.gif (9.35 KiB) 4176 mal betrachtet
Wobei die Schaltflächen "Execute" und "Close" immer gleich, und wie erwartet, funktionieren, bei der Schaltfläche "Menu" jedoch das erscheinende Menü sich nach der vorherigen Markierung (was ich also markiere bevor ich auf "Menu" klicke) richtet:

markiere ich die Wurzel "user" finde ich im Menü "Create File" und Create Directory", markiere ich einen der Ordner finde ich im Menü "Rename" und "Delete" und markiere ich ein Skript so finde ich im Menü "Delete" - nur nie finde ich etwas worauf ich klicken kann um das Editieren eines Skriptes auszulösen.


Aber wie schon angedeutet, es ist natürlich ziemlich schlecht wenn ich hier versuche ein Skript zum Funktionieren zu bewegen das ich selbst kaum verstehe.


Gruß
Stephan
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Elementare Frage zu Python in OO

Beitrag von Karolus »

Hallo

Oh - tut mir leid - ich hab mir das Ding schon vor einiger Zeit eingerichtet und inzwischen vergessen was ich alles geändert habe - ändere ca.Zeile 385 zu:

Code: Alles auswählen

    ENABLE_EDIT = True
    ENABLE_DEBUG = True
Wie ich gerade sehe habe ich auch ein paar Menüeinträge eingedeutscht:
menu_dropDown.png
menu_dropDown.png (26.48 KiB) 4164 mal betrachtet
Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Elementare Frage zu Python in OO

Beitrag von Stephan »

Danke, funktioniert.


Gruß
Stephan
Xaver
*
Beiträge: 15
Registriert: So, 09.03.2014 00:26

Re: Elementare Frage zu Python in OO

Beitrag von Xaver »

Hallo Stephan,

du hast ja schon ein Lösung. Ich habe anfangs auch nur einen einfachen Editor benutzt, aber der Umstieg auf Eclipse war eine Erleuchtung. Für mich ist das Wichtigste daran die Möglichkeit, nicht nur Variablen und Methoden sehen zu können (was man ja mit mri auch kann - wobei ich selten mal den Fall hatte, dass mri Methoden angezeigt hat, die es anscheinend nicht gab. In Eclipse tauchten die nicht auf), sondern frei durch die Verhältnisse browsen zu können. Mir hat das beim Verständnis von OO/LO sehr geholfen und ohne könnte ich gar nicht mehr.

Die Verbindung von OO/LO mit Eclipse und PyDev ist auch nicht wirklich schwer, daher poste ich hier noch ein Beispiel. (Ich finde leider grad die Quelle nicht, wo ich den Code herhabe.)

PyDev muss in Eclipse installiert sein.
Dann folgendes Script (in Win7) unter "C:\Program Files (x86)\OpenOffice 4\share\Scripts\python" ablegen. Z.B. als "Verbindung.py".
In OO unter Extras>Anpassen>Symbolleisten>Hinzufügen Im Bereich OpenOffice Makros>OpenOffice Makros>Verbindungen den Befehl "helfer" auswählen und hinzufügen.
Im Script muss noch der Pfad zu der PyDev Installation (zu pysrc) angepasst werden.

Eclipse zuerst starten, in die Debug Ansicht wechseln und PyDev Debug starten (Symbol: P mit grünem Käfer). Dann OO starten.
Ein Klick auf "helfer" stellt die Verbindung in der Codezeile pydevBrk() her. Das kann man auch mehrfach nutzen.

Code: Alles auswählen

import traceback
import uno
import unohelper
import sys


def pydevBrk():  
    # adjust your path 
    sys.path.append(r'C:\Users\Homer\Desktop\Programme\eclipse\plugins\org.python.pydev_3.1.0.201312121632\pysrc')  
    from pydevd import settrace
    settrace('localhost', port=5678, stdoutToServer=True, stderrToServer=True) 
		
		
def helfer(*args):
    
    ctx = XSCRIPTCONTEXT.ctx
    smgr = ctx.ServiceManager
    desktop = XSCRIPTCONTEXT.getDesktop()
    current_component = desktop.getCurrentComponent()
    
    # Fehler in der Konsole ausgeben
    try:
        ert
    except:
        traceback.print_exc()
        
    pydevBrk()	

Grüße,
Xaver
Dateianhänge
eclipse.JPG
eclipse.JPG (100.67 KiB) 4110 mal betrachtet
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Elementare Frage zu Python in OO

Beitrag von Stephan »

Hallo Xaver,

danke, ich schaue es mir an, nur ich kenne mich mit der API auch so aus und benutze überwiegend auch bei der StarBasic-Programmierung kein XRAY o.ä. mehr.
Nicht das ich alles wüßte, aber was ich brauche ist eigentlich immer Dasselbe und so kenne ich das und muß nur in Ausnahmefällen etwas nachschlagen.


Gruß
Stephan
Antworten