WindowManager TinyWM in Python

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
ubuntu_gnome
User
Beiträge: 1
Registriert: Mittwoch 21. August 2019, 18:20

Hallo liebe Python Gemeinde,

ich bin neu hier bzw habe angefangen Python für mich zu entdecken. Ich weiß nicht wer den WindowManager TinyWM von euch kennt, aber ich habe ein paar Probleme ihn ans laufen zu bekommen. Ich hoffe hier jemanden zu finden der weiß was umgeschrieben werden muss, bzw vllt den jemand der den Quelltext ganz schnell für python3 umschreiben kann. Die nächste Frage wäre ob ich das Programm dann mit "python ... .py" oder mit "startx ... .py" ausführen kann? Hier erst einmal der Quellcode:

Code: Alles auswählen


from Xlib.display import Display
from Xlib import X, XK

dpy = Display()
root = dpy.screen().root

root.grab_key(XK.string_to_keysym("F1"), X.Mod1Mask, 1,
        X.GrabModeAsync, X.GrabModeAsync)
root.grab_button(1, X.Mod1Mask, 1, X.ButtonPressMask,
        X.GrabModeAsync, X.GrabModeAsync, X.NONE, X.NONE)
root.grab_button(3, X.Mod1Mask, 1, X.ButtonPressMask,
        X.GrabModeAsync, X.GrabModeAsync, X.NONE, X.NONE)

while 1:
    ev = root.display.next_event()

    if ev.type == X.KeyPress and ev.child != X.NONE:
        ev.window.circulate(X.RaiseLowest)
    elif ev.type == X.ButtonPress and ev.child != X.NONE:
        ev.child.grab_pointer(1, X.PointerMotionMask|X.ButtonReleaseMask,
                X.GrabModeAsync, X.GrabModeAsync, X.NONE, X.NONE, X.CurrentTime)
        attr = ev.child.get_geometry()
        start = ev
    elif ev.type == X.MotionNotify:
        #while(XCheckTypedEvent(dpy, MotionNotify, &ev));
        xdiff = ev.root_x - start.root_x
        ydiff = ev.root_y - start.root_y
        ev.window.configure(
            x = attr.x + (start.detail == 1 and xdiff or 0),
            y = attr.y + (start.detail == 1 and ydiff or 0),
            width = max(1, attr.width + (start.detail == 3 and xdiff or 0)),
            height = max(1, attr.height + (start.detail == 3 and ydiff or 0)))
    elif ev.type == X.ButtonRelease:
        dpy.ungrab_pointer(X.CurrentTime)

Leider erzeugt das bei mir folgende Fehlermeldung, wenn ich versuche das Programm zu starten:

Code: Alles auswählen

Traceback (most recent call last):
  File "tinywm.py", line 13, in <module>
    X.GrabModeAsync, X.GrabModeAsync)
  File "/home/hacking/.local/lib/python2.7/site-packages/Xlib/xobject/drawable.py", line 551, in grab_key
    keyboard_mode = keyboard_mode)
  File "/home/hacking/.local/lib/python2.7/site-packages/Xlib/protocol/rq.py", line 1459, in __init__
    self._binary = self._request.to_binary(*args, **keys)
  File "/home/hacking/.local/lib/python2.7/site-packages/Xlib/protocol/rq.py", line 1141, in to_binary
    return self.to_binary(*varargs, **keys)
  File "<string>", line 2, in to_binary
struct.error: ubyte format requires 0 <= number <= 255


Über eure Hilfe würde ich mich sehr freuen :D und schon einmal vielen lieben Dank.
Antworten