Python: Wie ermittelt man die Monitor-Auflösung?

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

Moderator: Moderatoren

preklov
***
Beiträge: 76
Registriert: Mo, 29.06.2009 09:04
Wohnort: Ruhrgebiet

Python: Wie ermittelt man die Monitor-Auflösung?

Beitrag von preklov »

Ich will Bilddateien in ein Writer-Dokument einfügen. Dazu brauche ich die Bildgröße, um eventuell die Rahmengröße zu skalieren.

Falls in den Bilddateien die Größe nicht in mm, sondern in Pixeln angegeben ist, ermittele ich die Pixelgröße des Monitors und daraus dann die Grafikgröße in mm. Das geht in Basic leicht mit den Funktionen TwipsPerPixelX und TwipsPerPixelY, z.B.

Code: Alles auswählen

    ' 2540 ist ein Zoll, umgerechnet in 1/100 mm.
    ' Ein Zoll hat 14440 Twips (na ja, so ungefähr).
    oSize.Height = oGraphicDescriptor.SizePixel.Height * 2540.0 * TwipsPerPixelY() / 1440
    oSize.Width = oGraphicDescriptor.SizePixel.Width * 2540.0 * TwipsPerPixelX() / 1440
Leider gibt es so etwas in Python nicht. Bei der Suche nach einer systemunabhängigen Lösung bin ich auf Tkinter gestoßen. Ich habe mir das so gedacht:

Code: Alles auswählen

def get_screen_resolution():
    """Gibt ein Dictionary der aktuellen Monitorhöhe und -breite
    als Integers in mm und in Pixeln zurück, zusätzlich auch die
    Ausdehnung eines Pixels in Höhe und Breite als Fließkommazahlen
    in 1/100mm."""
    
    import Tkinter
    
    values = {}
    w = Tkinter.Tk()
    values['HeightInMM'] = w.winfo_screenmmheight()
    values['WidthInMM'] = w.winfo_screenmmwidth()
    values['HeightInPx'] = w.winfo_screenheight()
    values['WidthInPx'] = w.winfo_screenwidth()
    values['HeightOfPx'] = values['HeightInMM'] * 100.0 / values['HeightInPx']
    values['WidthOfPx'] = values['WidthInMM'] * 100.0 / values['WidthInPx']
    
    return values
In der Spyder-Konsole funktioniert das wunderbar.

Doch wie ich aus viewtopic.php?f=18&t=66448 erfahre, ist das so eine Sache mit Tkinter. Ich habe es unter openSUSE 13.2 mit dem originalen AOO 4.1.2 und dem testweise installierten LO 5.0.1.2 (ich weiß, es gibt Neueres). Tkinter wird nicht eingebunden. Auch nicht mit dem zum System gehörenden LO 4.3.7.2!

Die Fehlermeldung lautet:
[DEBUG] Error during invoking function on_click_convert in module vnd.sun.star.tdoc:/1/Scripts/python/batches.py (<type 'exceptions.ImportError'>: No module named _tkinter
/opt/openoffice4/program/uno.py:244 in function _uno_import() [return _g_delegatee( name, *optargs, **kwargs )]
/opt/openoffice4/program/python-core-2.7.6/lib/lib-tk/Tkinter.py:39 in function <module>() [import _tkinter # If this fails your Python may not be configured for Tk]
/opt/openoffice4/program/uno.py:244 in function _uno_import() [return _g_delegatee( name, *optargs, **kwargs )]
vnd.sun.star.tdoc:/1/Scripts/python/batches.py:276 in function on_click_convert() [None]
/opt/openoffice4/program/pythonscript.py:867 in function invoke() [ret = self.func( *args )]
)
Hat jemand eine Idee, anderswie an die Monitordaten zu kommen?

In der API kann ich nur com.sun.star.rendering.XGraphicDevice finden. Aber ich bekomme es nicht ans Laufen.
Für Linux kann man xrandr auslesen. Aber in MS Windows und MacOS kenne ich mich nicht so aus. Eine systemunabhängige Lösung wäre schon schön.

Schöne Grüße
Volker
Schöne Grüße
Volker
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Python: Wie ermittelt man die Monitor-Auflösung?

Beitrag von Karolus »

Hallo

Ich verlinke hier mal die direktere Lösung per Office-API und in Platformunabhängig.

viewtopic.php?f=18&t=66514&p=260175#p260175
Das erscheint mir etwas sinnvoller als eine Lösung "von hinten durch die Brust und das Knie direkt ins Auge"

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Antworten