Python: Arbeitsflächen, Taskliste/Fensterliste, etc...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
PNS-Richi
User
Beiträge: 68
Registriert: Donnerstag 17. Januar 2008, 01:48

Hallo,

ich bin neu in Python und bräuchte mal eure Hilfe.

Was ich brauche:
Anzahl vorhandener Arbeitsflächen.
Liste aller geöffneten Fenster auf dem aktuellen Display.

Dann wüsste ich gerne wie ich "Events" senden könnte z.B.:
Auf Arbeitsfläche 4 wechseln.
Fenster mit der WindowID XY minimieren, maximieren, etc...

Ich nehme mal an ich benötige Xlib?

Das ganze soll unter Linux laufen. Ich bräuchte ein Tutorial, oder kurze Beispiele.

Ich hab mir mal folgendes gebastelt durch Google und Docs.

Code: Alles auswählen

import sys
import os

from Xlib import X, display, Xutil
class Panel(object):
	def __init__(self, display):
	
		self.display = display
		self.screen  = display.screen()
		self.root    = self.screen.root

		#print self.root.get_full_property(display.Display().intern_atom("_NET_DESKTOP_NAMES"), X.AnyPropertyType)
	
		tasks = self.root.get_full_property(display.intern_atom("_NET_CLIENT_LIST"), X.AnyPropertyType)

		for task in tasks.value:
			print task
			
		ws_nr = self.root.get_full_property(display.intern_atom("_NUM_WORKSPACES"), X.AnyPropertyType)
			
		print ws_nr
			
		workspaces = self.root.get_full_property(display.intern_atom("_NET_DESKTOP_NAMES"), X.AnyPropertyType)

		for workspace in workspaces.value:
			print workspace
	
Panel(display.Display())
Weiteres Problem: Die Namen der Arbeitsflächen werden Vertikal ausgegeben; also immer mit einem Zeilenumbruch und nicht Zeilenweise.

Danke für eure Hilfe :)

lg Richi
BlackJack

Wenn etwas nicht so ausgegeben wird, wie man sich das wünscht, hilft es oft sich mit `type()` den Typ anzuschauen. Bei `workspace.value` ist das `str`, Du gibst also in der Schleife die Buchstaben der Zeichenkette einzeln auf jeweils einer eigenen Zeile aus.

Mit `repr()` kann man bei Zeichenketten dann heraus finden was sie *genau* enthalten. `workspace.value` ist *eine* Zeichenkette mit den Desktopnamen mit jeweils einem Nullbyte als Endmarkierung. Eine Liste bekommt man also durch `split()`\ten an Nullbytes und weglassen des letzten Eintrags der Liste.

Code: Alles auswählen

        print type(workspaces.value)
        print repr(workspaces.value)
        print workspaces.value.split('\0')[:-1]
Ausgabe:

Code: Alles auswählen

<type 'str'>
'Desktop 1\x00Desktop 2\x00Desktop 3\x00Desktop 4\x00'
['Desktop 1', 'Desktop 2', 'Desktop 3', 'Desktop 4']
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Je nach dem ist das wnck Modul von gnome-python etwas für dich ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Ich bin gerade auch mit dem wnck-Modul beschäftigt. Ist sehr einfach zu verwenden. Lies dir aber auf alle Fälle das hier durch, ohne diesen Codeschnipsel geht bei mir nämlich garnichts ;)

Gruß Fred
PNS-Richi
User
Beiträge: 68
Registriert: Donnerstag 17. Januar 2008, 01:48

Hi,

Gnome ist in dem Fall eine schlechte Wahl für mich. Da ich versuchen will eine Desktop Oberfläche in QT zu machen.

Mal sehen obs was grafischen, oder doch etwas nützliches wird ;)

lg Richi
lunar

PNS-Richi hat geschrieben:Gnome ist in dem Fall eine schlechte Wahl für mich. Da ich versuchen will eine Desktop Oberfläche in QT zu machen.
KDE?
PNS-Richi
User
Beiträge: 68
Registriert: Donnerstag 17. Januar 2008, 01:48

Hi,

Ich will mich nur ein bisschen mit purem QT(4.3) rum spielen, ohne KDE.

lg Richi
lunar

PNS-Richi hat geschrieben:Ich will mich nur ein bisschen mit purem QT(4.3) rum spielen, ohne KDE.
Ist dir nicht aufgefallen, dass pure Qt4 Programmierung relativ wenig gebraucht wird bei der Implementierung eines Desktop Environments. Sicherlich ist GUI ein großer Teil eines Desktop-Environment, der weitaus größere Teil geschieht allerdings unter der Haube. Die Tiefen von X werden dich wohl gerade am Anfang eines solchen Projekts wesentlich mehr beschäftigen als das Qt4-Toolkit.

Ich würde lieber eine beliebige, gute Gnome/Gtk-Anwendung auf Qt4 portieren, da lernst du mehr über Qt4, und die Softwaregemeinde hat mehr davon ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lunar hat geschrieben:Ich würde lieber eine beliebige, gute Gnome/Gtk-Anwendung auf Qt4 portieren, da lernst du mehr über Qt4, und die Softwaregemeinde hat mehr davon ;)
Ich würde sagen, dass es hilfreicher wäre eine schlechte GNOME-Anwendung zu Bugfixen als sie zu portieren, aber jedem das seine.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten