Seite 1 von 1

Cursor auf gtk.Window ändern

Verfasst: Mittwoch 25. März 2009, 22:25
von rhersel
Wie kann ich den Cursor auf einem gtk.Window ändern? Ich weiss, dass das mit gtk.gdk.Window.set_cursor() geht, habe aber keine Idee wie ich von meinem gtk.Window zum zugehörigen gtk.gdk.Window komme.

Verfasst: Mittwoch 25. März 2009, 23:32
von Leonidas
Die Dokumentation zu gtk.Window meint, dass es ein Attribut ``frame`` gibt, über das man auf das ``gtk.gdk.Window`` kommt.

Verfasst: Mittwoch 25. März 2009, 23:41
von rhersel
Ja, genau das habe ich auch schon in der Doku gefunden. Habe nur nicht geglaubt, dass frame wirklich das gdk.Window gibt. Werde es morgen mal ausprobieren.
Danke erstmal

Verfasst: Donnerstag 26. März 2009, 19:07
von rhersel
Tja, geht leider nicht:

Code: Alles auswählen

cursor = gtk.gdk.Cursor(gtk.gdk.HAND2)      # get a cursor
gdk_window = self.window.frame              # get the gdk Window
gdk_window.set_cursor(cursor)               # set the cursor
window.frame gibt None zurück.
Hat sonst noch jemand eine Idee, wie man an das gdk.Window heran kommt bzw. wie man den Cursor verändert?

Verfasst: Donnerstag 26. März 2009, 19:25
von Trundle
Das ``window``-Attribut benutzen und dabei den Fehler in der Dokumentation ignorieren, die meint, dass das ein `gtk.Window()` sei, was natürlich völliger Quatsch ist. Und am besten gleich noch den Bug melden.

Edit: Ah, beim ``window``-Attribut stimmt die Dokumentation, bei ``get_window()`` stehts falsch.

Verfasst: Donnerstag 26. März 2009, 20:24
von rhersel
Sorry wenn ich mich blöd anstelle, aber von welchem Objekt soll ich das 'window' Attribut benutzen? Das gtk.Window hat kein 'window' Attribut.

Verfasst: Donnerstag 26. März 2009, 20:59
von Trundle
`gtk.Window` erbt von `gtk.Widget`, also sollte es das eigentlich schon haben. Laut Dokumentation gibt es das Attribut seit PyGTK 2.4, was schon relativ alt ist. Es gibt noch die `get_window()`-Methode, aber die gibt es erst seit 2.14, und das ist relativ neu.

Verfasst: Donnerstag 26. März 2009, 21:29
von Dauerbaustelle

Code: Alles auswählen

In [3]: type(gtk.Window().window)
Out[3]: <type 'NoneType'>
Hm...

Verfasst: Donnerstag 26. März 2009, 21:35
von Trundle
Und das soll jetzt genau was zeigen?

Verfasst: Donnerstag 26. März 2009, 21:41
von Dauerbaustelle
Trundle hat geschrieben:Und das soll jetzt genau was zeigen?
Dass man mit der window-Variable irgendwie nicht sehr weit kommen wird?!

Verfasst: Donnerstag 26. März 2009, 22:11
von Trundle
Solange das Fenster nicht "realisiert" (für das Wort suche ich immer noch eine schöne Übersetzung) ist, ist es auch mit keinem Gdk-Fenster verbunden, das ist alles.

Code: Alles auswählen

>>> w = gtk.Window()
>>> w.window
>>> w.show()
>>> w.window
<gtk.gdk.Window object at 0x1f33d20 (GdkWindow at 0x1bff170)>

Verfasst: Freitag 27. März 2009, 14:51
von rhersel
Ja, so geht es. Hier mal Beispiel Code zum Wiederverwenden:

Cursor ändern:

Code: Alles auswählen

cursor = gtk.gdk.Cursor(gtk.gdk.HAND2)      # get a cursor
gdk_window = self.window.window             # get the gdk Window
gdk_window.set_cursor(cursor)               # set the cursor
Cursor wieder normal:

Code: Alles auswählen

gdk_window = self.window.window                         # get the gdk Window
gdk_window.set_cursor(None)                             # set the cursor
Danke