Seite 1 von 1

die "working area" bestimmen

Verfasst: Mittwoch 9. Januar 2008, 16:33
von nkoehring
Hallo,

wie bekomm ich denn raus, welche Bereiche des Desktops ich nutzen kann? Ich weiß nicht ob es da einen Unterschied zwischen Windows und Beispielsweise einem GNOME- oder KDE-Desktop gibt, aber wenn ich die Hoehe und Breite des Bildschirms bekommen will, faellt mir nur das ScreenDC ein. Das wiederum unterscheidet aber nicht zwischen Taskbar und freiem Desktop...

Fuer meinen Reminder wuerde ich aber gerne die Moeglichkeit haben, Fenster oberhalb der Taskleiste anzuordnen, damit sie nicht verdeckt werden.

Verfasst: Mittwoch 9. Januar 2008, 19:45
von gerold
Hallo nkoehring!

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import wx


app = wx.PySimpleApp()
f = wx.Frame(None)
f.Maximize()
usable_width, usable_height = f.GetSizeTuple()
f.Destroy()

screen_width = wx.SystemSettings.GetMetric(wx.SYS_SCREEN_X)
screen_height = wx.SystemSettings.GetMetric(wx.SYS_SCREEN_Y)

print "Full Size:", screen_width, screen_height
print "Usable Size:", usable_width, usable_height
mfg
Gerold
:-)

Verfasst: Mittwoch 9. Januar 2008, 21:37
von nkoehring
Ah vielen Dank gerold... ist das wirklich der einzigste Weg? Einen Frame maximieren um zu schauen wie groß er wird? Naja... was solls ^^

Danke fuer den Tipp!

Verfasst: Mittwoch 9. Januar 2008, 23:10
von gerold
nkoehring hat geschrieben:Einen Frame maximieren um zu schauen wie groß er wird?
Hallo nkoehring!

Wenn du die X- und Y-Koordinaten des maximierten Frames abfragst, bekommst du sogar mit, welchen Bereich du verwenden darfst. Das sollte plattformübergreifend funktionieren. Unabhängig ob eine oder mehrere Symbolleisten links, rechts, oben oder unten platziert wurden.

Unter Windows gibt es irgend eine Api-Funktion, mit der man das auch abfragen kann. Aber ich investiere keine Zeit in die Suche nach etwas, was sowiso nur unter Windows funktioniert, wenn es so einfach und plattformübergreifend gelöst werden kann. Ein Frame, das kurz (ein paar Millisekunden) existiert und dann sofort wieder zerstört wird, braucht während der Laufzeit keine Ressourcen.

Die Lösung mit dem Frame klingt nur merkwürdig, weil sie in keine fertige Funktion eingebettet ist. Aber bedenke: Das Frame wird nie gezeichnet. Es ist nur wie ein Lineal das man hinlegt um die Abmessungen abzulesen. :D

Ob das so auch unter Linux funktioniert, musst du aber selber ausprobieren. Es kann nämlich sein, dass ein Frame erst sichtbar werden muss, bevor man die Abmessungen auslesen kann. Aber man sollte sich nicht um ein Problem kümmern, welches vielleicht gar nicht exisitert. ;-)

mfg
Gerold
:-)

Verfasst: Donnerstag 10. Januar 2008, 04:09
von nkoehring
Hallo,

ich habe eben mehr oder weniger durch Zufall etwas entdeckt! Ich weiß bisher nicht wie es sich unter Linux und Co verhaelt, ob es in wx2.6 verfuegbar ist oder erst in wx2.8 ... aber ich weiß das es viel eleganter ist, als die Frame-Methode :o

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import wx


app = wx.PySimpleApp()

print "wxDisplay:"
print "display count:", wx.Display.GetCount()
displays = list()
for i in xrange(wx.Display.GetCount()):
    dspl = wx.Display(index=i)
    print "Display", i
    print "\t", dspl.GetGeometry()
    print "\t", dspl.GetClientArea()
    displays.append(dspl)
:roll:

Verfasst: Donnerstag 10. Januar 2008, 09:02
von gerold
nkoehring hat geschrieben:viel eleganter ist, als die Frame-Methode
Hallo nkoehring!

Ich wusste zwar, dass es einen Befehl dafür gibt, nur konnte ich ihn nicht mehr finden, weil ich nur nach "Screen" und "Desktop" gesucht habe. :roll:
http://www.python-forum.de/post-82377.html#82377

lg
Gerold
:-)