GUI für LibreOffice Calc

Plattformunabhängige GUIs mit wxWidgets.
Antworten
zarathustra
User
Beiträge: 33
Registriert: Samstag 17. April 2010, 23:02

Donnerstag 18. Oktober 2018, 22:25

Guten Abend im Forum,

ich habe ein Problem mit einer kleinen GUI, bestehend aus Fenster Texteingabefeld und Button. Wenn die Schaltfläche gedrückt wird, dann wird der Inhalt des Textfeldes in eine Tabellenzelle geschrieben. Das funktioniert auch. Die GUI wurde mit dem aktuellen wxFormbuilder 3.8.1 erstellt. Ich Teste unter Windows 10 und Ubuntu Bionic Beaver.

Folgende Probleme: Unter Windows erscheint der Textboxinhalt erst nach dem Schließen des Fensterchens. LibreOffice stürzt nicht ab.

Unter Ubuntu erscheint zwar der Textfeldinhalt unmittelbar nach drücken des Button in der Zelle aber LibreOffice stürzt komplett ab und startet im Wiederherstellungsmodus. Es passier auch bei Nutzung der durch den wxFormBuilder erzeugten XRC-Datei.

Kennt jemand von Euch das Problem?

Viele Grüße und erstmal gute Nacht

Zarathustra
Benutzeravatar
__blackjack__
User
Beiträge: 1415
Registriert: Samstag 2. Juni 2018, 10:21

Freitag 19. Oktober 2018, 00:09

@zarathustra: Wie sind denn das Programm und Calc verbandelt? Also wie fügst Du von einem wxWidgets-Programm aus etwas in eine Tabellenzeile in Calc ein?

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
zarathustra
User
Beiträge: 33
Registriert: Samstag 17. April 2010, 23:02

Freitag 19. Oktober 2018, 05:39

Guten Morgen __blackjack__

ich hole mir als globale Variablen zunächst das Dokument

Code: Alles auswählen

oDoc = XSCRIPTCONTEXT.getDocument() 
und dann das Sheet mit: oSheet = oDoc.CurrentController.ActiveSheet

Die Funktion des Button enthält einfach nur zwei Zeilen:

Code: Alles auswählen

oCell = oSheet.getCellRangeByName("A1")

Code: Alles auswählen

oCell.String = self.txtCtrl_1.GetValue()
Hinsichtlich des Absturz unter Ubuntu muss ich mich korrigieren. Dieser passiert nicht beim drücken des Button sondern beim Schließen der GUI über das Kreuz am Fenster.

Ich vermute man muss sich eine Funktion zum "Fenster schließen" erzeugen die etwas enthält, was die Verbindung zu oDoc und oSheet wieder kappt.

Hier das vollständige Script:

Code: Alles auswählen

import wx
import LibreOfficeWX as LOWX

oDoc = XSCRIPTCONTEXT.getDocument()
oSheet = oDoc.CurrentController.ActiveSheet

class Eingaben(LOWX.Hauptfenster):
	def __init__(self, parent):
		LOWX.Hauptfenster.__init__(self, parent)
		
	def btn_1_clicked(self, event):
		oCell = oSheet.getCellRangeByName("A1")
		oCell.String = self.txtCtrl_1.GetValue()
		return None
		
def Aufruf(*args):
	app = wx.App(False)
	frame = Eingaben(None)
	frame.Show(True)
	app.MainLoop()

if __name__ == '__main__':
	Aufruf(False)
Gerade habe ich mal obiges Script aufgerufen OHNE die Verbindungen zu Office. Also alle Zeilen mit oDoc, oSheet, oCell auskommentiert und LibreOffice stürzt immer noch ab. Liegt es an der Funktion "Aufruf" ?

Viele Grüße und Danke

Zarathustra
Benutzeravatar
__blackjack__
User
Beiträge: 1415
Registriert: Samstag 2. Juni 2018, 10:21

Sonntag 21. Oktober 2018, 00:54

@zarathustra: Wo kommt denn `XSCRIPTCONTEXT` her? Kann es sein das Du das aus einem in die Tabellenkalkulation integriertem Python-Interpreter startest? Kann/Darf man da einfach so `wx` verwenden?

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
zarathustra
User
Beiträge: 33
Registriert: Samstag 17. April 2010, 23:02

Sonntag 21. Oktober 2018, 09:59

@__blackjack__: Ja klar! Ich starte das aus LibreOffice mitgelieferte Python. Zumindest definitiv unter Windows. Dort habe ich zunächst pip installiert und mir dann noch zusätzlich geholt was ich brauche. wxPython, numpy, scipy, matplotlib, pandas.

Bei Linux muß man den libreoffice-scriptprovider-python installieren, sonst kann man unter "Extras"-->"Makros"-->"Makros Verwalten"-->"Python..." nicht aufrufen.

Ich weis nicht ob man das darf. Ich hab's getan. In einigen der Beispiele die ich im Netz zum Thema "LibreOffice Calc mit Python" gefunden habe, war der Weg so beschrieben. Aber halt immer nur "normale" Python Funktionen, ohne GUI. Auf die Idee mit GUI bin ich gekommen. Ich denke dass es so gehen müsste. Tut's halt nicht. :-(
Ich dachte sowas hätte hier auch schon mal jemand probiert.
Ich vermute, dass man eine Funktion während der Close-Funktion der GUI ausführen muss, die die Verbindung zwischen dem Python-Interpreter und Calc wieder kappt.

Auf'm Mac sieht's noch erbärmlicher aus. Da bekomme ich in das LibreOffice-Python noch nichtmal wxPython und numpy installiert. Einzig das Update von pip selbst hat funktioniert.

Es gibt wohl irgendwelche Wege, wie man anstelle des LibreOffice-Python ein bereits auf dem System vorhandenes Python nutzen kann (unter Linux ist das glaube ich so, durch denlibreoffice-scriptprovider-python), aber das erscheint mir auf's Erste zu kompliziert.

Viele Grüße

und einen schönen Sonntag

Zarathustra
zarathustra
User
Beiträge: 33
Registriert: Samstag 17. April 2010, 23:02

Montag 22. Oktober 2018, 20:22

Guten Abend,

__blackjack__ hast wohl Recht. Man darf es scheinbar nicht. Ich kann nämlich auch alles auskommentieren was "Libre Office angeht" und beim Schließen stürzt der Salat ab. Hhm eigentlich Schade. Ich dachte hier läge ein riesengroßer Vorteil von LO gegenüber MSO. Da muß ich sagen, geht der Punkt an MSO, denn hier funktioniert die Eingabe aus einer wxPython-GUI in eine Tabellenzelle via "xlwings" hervorragend. Bisher nur auf dem Mac getestet aber dann wird's unter Windows wohl auch klappen.

Problematik zwar nicht gelöst, denke aber das Thema kann zu den Akten.

Schönen Abend noch

Zarathustra
Benutzeravatar
__blackjack__
User
Beiträge: 1415
Registriert: Samstag 2. Juni 2018, 10:21

Dienstag 23. Oktober 2018, 14:53

@zarathustra: Ich würde halt erst mal schauen was das Programm selbst bietet. Man kann ja soweit ich weiss auch mit LibreOffice selbst Dialoge etc. erstellen. Mit StarBASIC ging das jedenfalls wenn ich mich recht erinnere. Hätte auch den Vorteil das man unter den verschiedenen Betriebssystemen nicht noch extra eine GUI-Bibliothek installieren muss.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
__deets__
User
Beiträge: 3680
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dienstag 23. Oktober 2018, 15:05

zarathustra hat geschrieben:
Montag 22. Oktober 2018, 20:22
Man darf es scheinbar nicht. Ich kann nämlich auch alles auskommentieren was "Libre Office angeht" und beim Schließen stürzt der Salat ab. Hhm eigentlich Schade. Ich dachte hier läge ein riesengroßer Vorteil von LO gegenüber MSO. Da muß ich sagen, geht der Punkt an MSO, denn hier funktioniert die Eingabe aus einer wxPython-GUI in eine Tabellenzelle via "xlwings" hervorragend. Bisher nur auf dem Mac getestet aber dann wird's unter Windows wohl auch klappen.
Man kann GUIs nicht so einfach mischen. Aber LO hat doch sein eigenes GUI-Toolkit, warum benutzt du das denn nicht?
zarathustra
User
Beiträge: 33
Registriert: Samstag 17. April 2010, 23:02

Freitag 26. Oktober 2018, 16:30

Hallo __deets__

wenn Du Tk meinst, das funktionierte nicht. Das startete erst gar nicht, sondern stieg mit diversen Fehlermeldungen gleich beim Aufruf aus. die genauen Meldungen habe ich nicht mehr auf dem Schirm. Irgendwas beim Aufruf einer pythonscript.py-Datei. Keine Ahnung. Auf Windows war es meine ich nicht möglich Tk nach zu installieren.

Beim LO-Forum hatte sich auch schon jemand an Tk versucht, fand aber, meine ich, auch kein glückliches Ende.

xlwings mit Excel und wx klappt, bis auf die Tatsache, dass bei Mojave's dunklem Hintergrund der Schaltflächentext nicht vernünftig lesbar ist. Auch wenn man definiert, dass der Text des Button unterstrichen sein soll, wird das nicht zwingend übernommen. Obwohl man speichert und den Code neu generiert. Ich vermute ein Bug im wxFormbuilder aber weiß es nicht wirklich.

Dessen flatpak-Variante war unter Linux nicht wirklich gut benutzbar. Man hat überhaupt kein Fenster auf der Designeroberfläche gesehen und bei dunklem Hintergrund (BlackMate) war der Objektinspektor oder Eigenschaftseditor oder wie sich das auch immer nennt nicht wirklich lesbar. Weiße Schrift auf hellgelbem Untergrund. Ging gar nicht.

Übrigens hat(te) Firefox ein ähnliches Problem mit der Lesezeichenliste. Aber das nur am Rande.

Tk-GUI ging nicht und eine mit glade gebastelte GUI zeigte ähnliche Zicken wie wx.

Ich denke die Macher von LO wollen nicht, dass Python mit GUI betrieben wird. Eine Möglichkeit fällt mir gerade ein, wäre einen Basic-Dialog zu bauen und hier dann über die Schaltfläche via Basic-Befehl das Pythonscript zu starten. Sofern das geht. Bei xlwings ist das RunPython.

Das mit den Dialogen in LO funzt auch nicht so wie bei VBA, von wegen Formular, Buttons und Textbox drauf, Doppelklick auf den Button und man landet in der "Button-Click-Prozedur"...

Viele Grüße

Zarathustra
Benutzeravatar
__blackjack__
User
Beiträge: 1415
Registriert: Samstag 2. Juni 2018, 10:21

Freitag 26. Oktober 2018, 22:23

@zarathustra: Wir meinen nicht Tk sondern das GUI-Toolkit von LibreOffice. Kann man das von Python aus nicht benutzen? Ich hätte vermutet das man mit Python das gleiche machen kann wie mit BASIC.

Das hat weniger etwas damit zu tun was die Macher von LO wollen, sondern mehr damit das man mehr oder weniger grundsätzlich nicht mehrere GUI-Rahmenwerke mischen kann, weil *die* das nicht vorsehen. Das macht in der Regel ja auch gar keinen Sinn.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
zarathustra
User
Beiträge: 33
Registriert: Samstag 17. April 2010, 23:02

Dienstag 30. Oktober 2018, 23:09

Hallo __deets__, hallo __blackJack__

jetzt verstehe ich was ihr meint. Diese VCL Library. Da fand ich keine Hinweise bezüglich Python. Basic Dialoge. Ich meine da auch über etwas gestolpert zu sein, wie man per Basic-Befehl ein Python-Script starten kann.

Ich dachte einfach man kann Tk, wxPython, Gtk oder Qt oder oder... einfach so verwenden.

Viele Grüße

Zarathustra
__deets__
User
Beiträge: 3680
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dienstag 30. Oktober 2018, 23:32

Nein. Entweder benutzt du PyUNO Remote als Server. Dann kannst du tun was du willst. Oder du versuchst Skripte IN LO laufen zu lassen (also gleicher Prozess). Dann geht das nicht. Bei mir geht es aber unter Ubuntu schon so nicht. Schmiert einfach ab.....
Antworten