die "working area" bestimmen

Plattformunabhängige GUIs mit wxWidgets.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

die "working area" bestimmen

Beitragvon nkoehring » Mittwoch 9. Januar 2008, 16:33

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Mittwoch 9. Januar 2008, 19:45

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Mittwoch 9. Januar 2008, 21:37

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!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Mittwoch 9. Januar 2008, 23:10

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Donnerstag 10. Januar 2008, 04:09

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:
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Donnerstag 10. Januar 2008, 09:02

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder