Cursor auf gtk.Window ändern

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Die Dokumentation zu gtk.Window meint, dass es ein Attribut ``frame`` gibt, über das man auf das ``gtk.gdk.Window`` kommt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

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
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

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?
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

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.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Sorry wenn ich mich blöd anstelle, aber von welchem Objekt soll ich das 'window' Attribut benutzen? Das gtk.Window hat kein 'window' Attribut.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

`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.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Code: Alles auswählen

In [3]: type(gtk.Window().window)
Out[3]: <type 'NoneType'>
Hm...
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Und das soll jetzt genau was zeigen?
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Trundle hat geschrieben:Und das soll jetzt genau was zeigen?
Dass man mit der window-Variable irgendwie nicht sehr weit kommen wird?!
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

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)>
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

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
Antworten