Tastenkürzel

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Freitag 28. März 2008, 22:25

Ich versuche mich gerade an pygtk.

Angefangen habe ich mit einem Notebook.
Bei diesem Notebook möchte ich "F - Tasten" nutzen, um damit ein bestimmtes Tab anspringen zu können.


Folgendes habe ich anhand von Beispielen und der pygtk Doku / Referenz zusammengebraut:

http://paste.pocoo.org/show/36167/

Leider bekomme ich einen Fehler:

Code: Alles auswählen

TypeError: callback argument not callable
Des weitern frage ich mich, wie ich die Tasten "F1" bis "F5" verwenden kann. Bei den gtk.gdk Constants habe ich keine Entsprechung gefunden.

Code: Alles auswählen

accel_group.connect_group(ord('t')
erwartet nur ein Zeichen, so dass:

Code: Alles auswählen

accel_group.connect_group(ord('F1')
eben nicht funktioniert.

Cu Sebastian
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Freitag 28. März 2008, 23:02

Mit ``self.tab_change_event(3)`` rufst du die Methode `tab_change_event` auf, und der Rückgabewert derselbigen wird dann als Argument für `connect_group` übergeben. Da der Rückgabewert aber `None` ist, und `None` eben nicht aufrufbar ist, wird die Exception geworfen. Außerdem erwartet das `callback`-Argument bei `connect_group` ein aufrufbares Objekt, das vier Argumente entgegen nimmt (accel_group, acceleratable, keyval, modifier).

keyval von F1 bekommst du entweder mit ``gtk.gdk.keyval_from_name('F1')`` oder mit der Funktion `gtk.accelerator_parse`. `gtk.accelerator_parse` kann man auch Strings wie ``<Shift><Alt>F1`` übergeben, die Funktion gibt ein (keyval, modifier)-Tupel zurück.
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Freitag 28. März 2008, 23:34

Danke dir, für die schnelle Hilfe,aber das ist für heute zu viel für mich, ich gehe ins Bett. ;-)

Ich schau mir das Morgen(oder Sonntag) mal in Ruhe an. Mal sehen, was ich davon dann verstehe / umsetzen kann.
Denn ich muss ja ehrlich zugeben, dass ich mit gtk noch nicht ganz "per du" bin.
Mal ganz davon abgesehen, dass ich mich nicht als Programmierer sehe und mir viele Grundlagen / Begriffe fehlen, was viele Anleitungen, Dokus für mich sehr schlecht nutzbar macht.

So far
Sebastian
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Montag 14. April 2008, 20:09

Hat etwas gedauert, aber du hast mich auf die richtige Fährte gebracht.

Den überarbeiteten Code gibt es hier.

Jezt habe ich aber eine Warnung, die ich gerne weg hätte:

Code: Alles auswählen

gtk-notebook.py:65: GtkWarning: _gtk_accel_group_attach: assertion `g_slist_find (accel_group->acceleratables, object) == NULL' failed
self.mainwindow.add_accel_group(self.accelgroup2)
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Montag 14. April 2008, 20:19

Mr_Snede hat geschrieben:Jezt habe ich aber eine Warnung, die ich gerne weg hätte:

Code: Alles auswählen

gtk-notebook.py:65: GtkWarning: _gtk_accel_group_attach: assertion `g_slist_find (accel_group->acceleratables, object) == NULL' failed
self.mainwindow.add_accel_group(self.accelgroup2)
Zeile 65 ist einmal zu weit eingerückt.
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Montag 14. April 2008, 20:49

Argh, dass ich das selbst nicht gesehen habe.
Danke

Habe schon weiter am Code gebastelt und den if/elif Block durch eine for Anweisung ersetzt:
--> http://paste.pocoo.org/show/40464/

Kürzer ist es ja nun, aber nicht so schnell ersichtlich.
Mal schauen, ob mir das so gefällt.
Antworten