Screenshot per Makro

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

Moderator: Moderatoren

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

Re: Screenshot per Makro

Beitrag von Stephan »

Das ist jetzt zwar ein interessantes Beispiel - aber da kann|sollte ich mich doch vorher entscheiden ob ich Basic oder Python benutzen will.
Das Beispiel diente nur der Demonstration, weil ich dem Eindruck entgegentreten wollte das "Zusammenarbeit [...] möglich aber kompliziert" wäre. Zumindest empfinde ich das nicht als kompliziert.

Das Beispiel diente hingegen nicht dem Aufstellen der These das die Kombination von StarBaic+Python besser wäre als Python, einzig ist sie eine Alternative für Leute, so wie den Threadstarter und auch mich, denen die Möglichkeiten von StarBasic in konkreten Fällen nicht genügen, die aber auch nicht in der Lage sind alles komplett in Python zu programmieren.


Gruß
Stephan
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Screenshot per Makro

Beitrag von erikafuchs »

... eine Alternative für Leute, so wie den Threadstarter und auch mich, denen die Möglichkeiten von StarBasic in konkreten Fällen nicht genügen, die aber auch nicht in der Lage sind alles komplett in Python zu programmieren.
... ja, genau. Prima, Danke. Das ist mir sogar (fast auf Anhieb) gelungen dein Beispiel vorne nachzuvollziehen. Jetzt müsste ich noch den Code aus Hikers Link zum Laufen bringen (das ist mir allerdings noch nicht gelungen) ... und dann müsste der Code ja wohl auch noch in meine Rechentrainerdatei rein und nicht in das Benutzerverzeichnis.
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: Screenshot per Makro

Beitrag von craig22 »

Hallo,

Stephan, vielen Dank für Dein Beispiel Stabasic/ Python.
Sehr interessant, was mich dazu bewegt hat weiter zu forschen.
Nun bin ich in der LO-Hilfe fündig geworden, was das Ausführung von Python-Scripten aus Basic heraus
ermöglicht, als auch Scripte in ein Dokument einzubinden, um diese dann mittels Basic zu starten.
https://help.libreoffice.org/7.1/de/tex ... ython.html

Hier habe ich ein Python-Script gefunden, welches Screenshot erstellen soll (noch nicht getestet).
Python-mss error: Impossible to take screenshot on regions with grab()
Am Ende des Beitrags steht die Lösung, für das anfängliche Scheitern des Codes.

@Pit
Fazit:
  • es ist möglich mit relative einfachen MItteln aus Basic heraus ein Python-Scirpt zu starten, und
  • es ist möglich das Scirpt in ein Dokument einzubinden.
Ich selbst bin noch in der Experimentierphase und kann noch keine Lösung anbieten.

@Karolus
Ja, ich bin auch der Meinung, dass es besser wäre alles aus einem Guss zu programmieren, also Python ODER Basic,
aber in Pit's Fall gibt es nun mal ein sehr aufwendiges Starbasic-Programm, welches über Jahre entstanden ist.
Wäre Starbasic in der Lage Screenshot zu erstellen, ohne das ScriptProvidergewurstel , dann wäre uns allen sehr geholfen.
Ich weiß, Du machst gerne Werbung für Python und ich finde die Sprache sehr interessant und
mächtig, aber ich habe in meinem Alter kein Interesse nochmals aufwendig Handbücher zu wälzen.
Bin trotzdem für Deine vielfältigen Python-Beispiele sehr dankbar.

Somit ist hier nach wie vor Pit's Thema aktuell:
Unter Windows mittels Starbasic, ggf. unter zur Hilfenahme des ScriptProvidergewurstel :) oder wenn es doch irgendwie geht,
nur mittels Starbasic einen Screenshot zu erstellen.
Das Ganze soll in AOO und in LO lauffähig sein.

Ich bin auf die Lösung gespannt... 8)
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Screenshot per Makro

Beitrag von erikafuchs »

Hallo Craig,
ich habe ja kaum Ahnung von Python (oder auch gar keine), habe jetzt mal in den, von dir verlinkten, Beitrag reingeschaut, hier wird, ebenso wie in dem von Hiker verlinkten Beitrag, wird die Bibliothek PIL (Pillow) benötigt.
However, with that information in mind, it still do not so I decided to move to another library called PIL. I replaced this

with mss.mss() as sct:
sct.grab(region)

by this

ImageGrab.grab(bbox)

At least it works
von Hiker » Sa, 16.10.21 14:04
Am Ende des folgenden Links ist ein Python-script verlinkt. Ich gerade nur nicht sicher, ob PIL/Pillow beim Python in LibreOffice direkt dabei ist.
Wenn ich das Pythonscript aus Hikers Link ausführe, finde ich keinen Screenshot auf dem Desktop. Wenn ich das Script in Pycharm ausführe, erhalte ich eine Fehlermeldung:
Fehlermeldung in Screenshot Programm.jpg
Fehlermeldung in Screenshot Programm.jpg (181.72 KiB) 2661 mal betrachtet

Dann habe ich die Bibliotek PIL installiert. Das hilft auch nichts, gleiche Ergebnisse.
Dann habe ich die Pythondatei frech einfach mal in den OO-Userordner gepackt , dort kann man sie natürlich nicht einfach ausführen.
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Screenshot per Makro

Beitrag von Hiker »

Dann habe ich die Bibliotek PIL installiert. Das hilft auch nichts,
PIL ist die originale Image-Lib, aber soweit ich weiss nicht auf Python3 portiert.
Statt dessen gibt es fur Python3 den fork
Pillow. Da LibreOffice auf Python3 umgestiegen ist brauchst Du dort wohl Pillow. Ich neme an, dass AOO ebenfalls umgestellt hat, da Python2 nicht mehr gewartet wird, habe da aber keine aktuelle Version zur Hand.

Mfg, Jörn
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Screenshot per Makro

Beitrag von erikafuchs »

Hallo @Hiker
Statt dessen gibt es fur Python3 den fork
Pillow.
... wie jetzt fork? Pillow? cmd sagt, ich hätte Pillow bereits installiert.

Ich hätte ja jetzt gerne erstmal den Screenshot direkt mit dem Code hier:
https://github.com/idachev/python-utils/ (... von der, von dir verlinkten Seite) erzeugt. Beim Aufruf passiert wohl was, einen Screenshot auf dem Desktop findet sich aber nicht.
Wobei ich wieder betonen muss, dass ich von dem, was ich da tue, wieder mal keine Ahnung habe. Aber immerhin habe ich Python und Pycharm installiert, habe in Python PIP aktualisiert (was immer das auch sein mag) und die Pillow Bibliothek installiert. Außerdem habe ich den Python Ordner in OO gefunden, das ist doch auch schon mal was!
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Screenshot per Makro

Beitrag von Hiker »

Stephan hat geschrieben: Sa, 16.10.2021 20:39 ..., aber die Zusammenarbeit von Python und StarBasic ist eigentlich einfach.
...
Es ist nicht das, was ich unter "Zusammenarbeit" verstehe. Die beiden Sprachen arbeiten nacheinander am selben Dokument und übergeben wird nur der Handle zum Dokument.

Zur direkten Zusammenarbeit gehören für mich direkte Funktionsaufrufe und Rückgabe von Ergebnissen. Dann kommt man schnell an kompliziertere Fragen.
  • Was ist ein Basic-String in Python3
  • Wie ist das mit anderen Typen? Meinen die Sprachen da immer dasselbe?
  • Kann ich ein Tupel übergeben
  • Wenn etwas von Python als immutable angesehen wird, gilt das dann auch für Basic?
  • Was passiert eigentlich im Fehlerfall, wenn es on error in BASIC und exceptions in Python gibt? Try:-Blöcke sollten ja eher problemlos sein.
  • Im ask-forum läuft gerade was ist eigentlich ein struct? Link muss ich noch raussuchen
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Screenshot per Makro

Beitrag von Hiker »

erikafuchs hat geschrieben: So, 17.10.2021 19:07 Hallo @Hiker
Wobei ich wieder betonen muss, dass ich von dem, was ich da tue, wieder mal keine Ahnung habe. Aber immerhin habe ich Python und Pycharm installiert, habe in Python PIP aktualisiert (was immer das auch sein mag) und die Pillow Bibliothek installiert.
Da durfte das Problem liegen. Du bist ja wohl Windows-Nutzer. Da bringt LO seine eigene Python Version mit.
Du hast also bisher haufenweise zusatzliches Zeug installiert, das LO nicht nutzt.

Dein zusätzliches Python 3 hatte sicher Pillow statt PIL dabei, bei LO bin ich mir eben nicht sicher...
Via APSO Idle aufrufen, dann prüfen...

Aber ich habe ja nie behauptet, das das einfach wäre.
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Screenshot per Makro

Beitrag von erikafuchs »

Da durfte das Problem liegen. Du bist ja wohl Windows-Nutzer. Da bringt LO seine eigene Python Version mit.
Du hast also bisher haufenweise zusatzliches Zeug installiert, das LO nicht nutzt.
Nun ja, das weiß ich schon. Meine Überlegung war, dass ich, bevor ich jetzt Python in OO angehe, zunächst mal testen wollte, ob dieser Code überhaupt (ohne OO) einen Screenshot erzeugt. ME war auch PIL bzw. Pillow nicht in der Windows-Python-Installation vorhanden, da die Installation ohne deratige Nachricht durchgeführt wurde und es außerdem im Internet auch Beschreibungen gibt, wie man die Bibliothek installiert.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Screenshot per Makro

Beitrag von Stephan »

Es ist nicht das, was ich unter "Zusammenarbeit" verstehe.
dann IST das so und unsere Meinung unterscheidet sich in diesem Punkt.
Die beiden Sprachen arbeiten nacheinander am selben Dokument und übergeben wird nur der Handle zum Dokument.
??
In meinem Beispiel ruft Basic eine Python-Funktion auf und dasselbe könnte umgekehrt auch Python tun. WEnn ich Letzteres nicht im Beispiel umgeetzt habe, dann weil mir dazu noch die Routine fehlt. Mein Unwissen ist aber doch kein Unvermögen von Python.
Zur direkten Zusammenarbeit gehören für mich direkte Funktionsaufrufe und Rückgabe von Ergebnissen.
ja, das ist möglich.
> Was ist ein Basic-String in Python3
ebenfalls ein String (oder warum nicht?)
> Wie ist das mit anderen Typen? Meinen die Sprachen da immer dasselbe?
Nein, aber das ist ja auch nicht nötig, weil man das zwischen Python und Basic dolmetschen kann.
Sorry, nur das ist 1:1 dieselbe Situation wie bei der menschlichen Sprache, falls wir davon ausgehen würden das wir jede Aussage der einen Sprache 100%ig in jede andere Sprache übersetzen können müssen und wir jede 99,9% identische Übersetzung ablehnen, dann könnten wir uns halt nur anschweigen.
> Kann ich ein Tupel übergeben
Ja. Das weiß ich weil ich seit einigen Wochen damit arbeite.
> Was passiert eigentlich im Fehlerfall, wenn es on error in BASIC und exceptions in Python gibt?
Für Python ist gerade diese Frage 100%ig klar, denn es ist doch wohl ein Grundsatz der Python-Programmierung das Fehler immer abgefangen werden müssen (Zen of Python: "Errors should never pass silently.") und Basic-Programmierer müssen dann halt sorgfältiger arbeiten als im Durchschnitt, wobei ich nicht sage das Basic-Programmierr nicht ohnehin auch Fehlerroutinen schreiben, nur es gibt halt ein Zen of Basic das dieses Vorgehen markant in eine Regel fasst.
> Im ask-forum läuft gerade was ist eigentlich ein struct? Link muss ich noch raussuchen
der Link ist:
https://ask.libreoffice.org/t/is-it-pos ... ic/69080/3



Das waren jetzt ein paar Aussagen von mir, wie ich die Situation sehe, denn ich bin bezüglich Python hier im Forum langsam irritiert, weil ich seit Jahren zu verstehen gebe (gerade Karolus habe ich mehrfach angesprochen) das mir Python willkommen ist und jeder hier auf meine Unterstützung als Moderator/Administrator rechnen kann der hier im Forum Python 'machen' will.
z.B. ein Python-Unterforum einzurichten wäre jederzeit möglich, einzig müsste sich dann halt auch jemand darum kümmern das sich das entwickelt (z.B. das "HTML Editor" Unterforum ist ein Anachronismus, was man eigentlich löschen könnte). Das wird anfangs schwierig sein, aber dann muss man halt die Nutzer anfangen zu locken mit einer FAQ oder ausgearbeiteten Beispielen o.ä. bis das Ganze Fahrt aufnimmt.

Nur Eines habe ich auch immer ehgrlich gesagt: Python ist nicht mein Gebiet und deshalb müsste die eigentliche Arbeit von denen gemacht werden die sich mit Python auskennen, so wie andere und ich seit ca. 2005 hier im Forum die 'eigentliche Arbeit' bezüglich Starbasic geleistet haben.

Und ja, das heisst auch sich immer wieder selbst uzu motivieren, immer wieder quasi das Python-ABC neu vorzutragen, auch wenn es langweilig ist und wenn man sich ärgert das Frager sich so wenig selbst zu informieren bereit sind.


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

Re: Screenshot per Makro

Beitrag von Stephan »

Nun ja, das weiß ich schon. Meine Überlegung war, dass ich, bevor ich jetzt Python in OO angehe, zunächst mal testen wollte, ob dieser Code überhaupt (ohne OO) einen Screenshot erzeugt. ME war auch PIL bzw. Pillow nicht in der Windows-Python-Installation vorhanden, da die Installation ohne deratige Nachricht durchgeführt wurde und es außerdem im Internet auch Beschreibungen gibt, wie man die Bibliothek installiert.
mal ein Einwurf der mir schon in den Sinn kam als ich den Eröffnungspost des Threads las, nur ich wollte nicht der advocatus diaboli sein:

Warum verzichtest Du nicht auf Screenshots und wertest ganz 'konventionell' die Eingabe in den Dialog aus? Dazu ist es doch nur nötig jede im Dialog gemachte Eingabe zu protokollieren, was doch techjnsch überhaupt nicht schwer ist indem Du entweder das Ereignis 'Feld verliert Fokus' nutzt oder, noch penibler, indem Du jeden Tastendruck innerhalb der Felder protokolierst.


Gruß
Stephan
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Screenshot per Makro

Beitrag von Hiker »

> Was ist ein Basic-String in Python3
ebenfalls ein String (oder warum nicht?)
Strings in Python3 müssen eine Zeichensatz-Information haben. Bei Rückgabe an Basic sollte(?) diese dann verschwinden.

Oder ein String ist eben kein String, sondern eine Bytesammlung ohne Typ...

Quasi alle diese Probleme sind lösbar und stören mich auch wenig, aber es kostet Zeit diese Dinge sauber zu klären, vor allem, da die Dokumentation bisher wenig systematisch ist.

Letztlich bin ich ein Pascal/Modula/C/bash-Programmierer, der heute halt Python für Dinge nutzt, für die ich früher mehr perl gelernt hätte (und teilweise nur, weil ich annehme, dass nach mir keiner mehr in meiner Firma ein awk-Skript anfassen würde.)
Und wenn ich - wie beim Thema pip - mal in die Tiefen der doku tauche, ist das Ergebnis manchmal auch nicht erhellend...

Daher versuche ich nicht auch noch die Module zu mischen.

Bei der Fehlerbehandlung:
Für Python ist gerade diese Frage 100%ig klar, denn es ist doch wohl ein Grundsatz der Python-Programmierung das Fehler immer abgefangen werden müssen
Mein Problem ist die Frage, ob das sauber getrennt bleibt, wenn ich 2 Exception-Handler habe (einmal in BASIC, einmal in Python), wer zuerst kommt oder ob für die andere Sprache dann keine Exception stattgefunden hat.
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Screenshot per Makro

Beitrag von Stephan »

Oder ein String ist eben kein String, sondern eine Bytesammlung ohne Typ...

Quasi alle diese Probleme sind lösbar und stören mich auch wenig, aber es kostet Zeit diese Dinge sauber zu klären, vor allem, da die Dokumentation bisher wenig systematisch ist.

Letztlich bin ich ein Pascal/Modula/C/bash-Programmierer, der heute halt Python für Dinge nutzt, für die ich früher mehr perl gelernt hätte (und teilweise nur, weil ich annehme, dass nach mir keiner mehr in meiner Firma ein awk-Skript anfassen würde.)
Und wenn ich - wie beim Thema pip - mal in die Tiefen der doku tauche, ist das Ergebnis manchmal auch nicht erhellend...

Daher versuche ich nicht auch noch die Module zu mischen.
Verstehe.

Vielleicht ist mein Blick deshalb etwas anders weil ich quasi an all die Detailprobleme im Rahmen der OO/LO Programmierung gewöhnt bin und ich das somit als Normalsituation sehe (z.B. wurde in jünger Vergangenheit bei zwei Access-Projekten wieder deutlich, welche Quälerei die Frontendprogrammierung unter OO/LO-Base eigentlich ist).


Gruß
Stephan
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Screenshot per Makro

Beitrag von erikafuchs »

Stephan hat geschrieben: So, 17.10.2021 21:36 mal ein Einwurf der mir schon in den Sinn kam als ich den Eröffnungspost des Threads las, nur ich wollte nicht der advocatus diaboli sein:

Warum verzichtest Du nicht auf Screenshots und wertest ganz 'konventionell' die Eingabe in den Dialog aus? Dazu ist es doch nur nötig jede im Dialog gemachte Eingabe zu protokollieren, was doch techjnsch überhaupt nicht schwer ist indem Du entweder das Ereignis 'Feld verliert Fokus' nutzt oder, noch penibler, indem Du jeden Tastendruck innerhalb der Felder protokolierst.
Nun ja, theoretisch könnte ich das machen. In der "normalen" Version für die Nutzer wird ja jede Eingabe überprüft und das nächste Feld ist erst zugänglich, wenn die richtige Zahl eingegeben wird:
Div_normal.jpg
Div_normal.jpg (97.27 KiB) 2565 mal betrachtet
In der Testversion wird natürlich erst am Ende überprüft, ob das Ergebnis richtig ist. Hin und wieder wollen Schüler (Schülerinnen eher nicht) den Rechentrainer überlisten oder die Note hinterher anzweifeln. Ihre Eingabe könnte so aussehen:
Div_Test.jpg
Div_Test.jpg (96.61 KiB) 2565 mal betrachtet
Das, im Hintergrund gezeigte, Protokoll wird am Ende im Ausdruck des Test mit ausgegeben und hier stünde dann "falsch" und "Erg. richtig, Re. falsch". Und da zeigt halt "ein Bild mehr als tausend Worte" und der Ausdruck des Protokolls würde nicht sehr übersichtlich - und das nur, falls mal ein Querulant nachfragt.

Ansonsten habe ich ja schon weiter oben geschrieben, halte ich es zwischenzeitlich für einfacher, wenn diejenigen, die mit der Meldung "Ergebnis richtig, Rechnung falsch" händisch einen Screenshot machen und abspeichern würden (Auch wenn dazu einige Kids nicht in der Lage sind). Der Screenshot per Pythonscript interessiert mich jetzt aber rein akademisch. Eingebaut hätte ich das wohl nur, wenn es einfach, mit kurzem Code, zu lösen gewesen wäre.

Die Diskussion hier hat sich ja eh schon verselbstständigt und es wäre schön, wenn hier ein Howto zur Frage "Wie baut man Python Code in ein Basic Makro ein, wenn das Problem mit Basiccode nicht lösbar ist?"
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Screenshot per Makro

Beitrag von Karolus »

erikafuchs hat geschrieben:zur Frage "Wie baut man Python Code in ein Basic Makro ein, wenn das Problem mit Basiccode nicht lösbar ist?"
Wie das grundsätzlich lösbar ist hat Stephan ja schon gezeigt, die Frage ist hier aber schon irrelevant, weil die (manuelle) Zuordnung einer Schaltfläche oder eines Tastaturkürzels völlig gleich ablaufen, egal ob du eine Basic-prozedur zuordnest oder eine Python-funktion.
( der einzige Unterschied besteht darin das die aufgerufene Python-function ein [optionales] Argument in der Funktionssignatur benötigt, währen Basic das mitgelieferte Argument stillschweigend verwirft, falls in der aufgerufenen Prozedur kein Argument vorgesehen ist.

also etwa:

Code: Alles auswählen

def take_screenshot( *event ):
    …
anstelle von:

Code: Alles auswählen

def take_screenshot( ):
    …
@Stephan: kannst du an der Stelle das Thema abtrennen, es gibt hier ein paar Fragen die nichts mit "Screenshot per Makro" zu tun haben.
Zuletzt geändert von Karolus am Mo, 18.10.2021 15:31, insgesamt 1-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Antworten