PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pygtk: Popup-Menüs mit Untermenüs



LarsHanson
10-10-2006, 20:34
Hallo zusammen!

Ich habe eine Anwendung in python geschrieben mit GTK-Oberfläche, dabei bin ich auf ein Problem mit einem Popup-Menu gestoßen. Die Einträge in dem Menü selbst funktionieren problemlos, wenn ich aber Untermenüs einbaue, dann reagieren deren Einträge nicht richtig auf Mausklicks. Die Untermenüs klappen zwar auf, aber man muss erst den entsprechenden Eintrag im übergeordneten Menü anklicken und dann erst reagieren die Einträge im Untermenü.

Ich hab das mal aufs nötigste reduziert, ein einfaches Minifenster zum reinklicken, das hänge ich hier mal an. Wenn man das Ding in einem Terminal startet wird beim Anklicken von Menüeinträgen jeweils was reingeschrieben - oder eben nicht :(

Kennst sich da jemand aus und kann mir sagen was ich übersehen habe?

Danke schon mal im voraus, Lars

jeebee
11-10-2006, 20:42
Hmm, hab mal versucht (mangels python Kentnissen) dasselbe mit C zu reproduzieren. Bei der C Version funktioniert das Ganze allerdings einwandfrei. Daher ist das Verhalten der pyGTK-Variante möglicherweise ein Bug in pyGTK...

MfG jeebee

/edit: im Anhang der C Source Code, kompilieren mit
gcc -o menu_test `pkg-config --libs --cflags gtk+-2.0` menu_test.c

LarsHanson
12-10-2006, 10:53
Daher ist das Verhalten der pyGTK-Variante möglicherweise ein Bug in pyGTK...

Nur gibt es ja durchaus Programme in pygtk in denen so was funktioniert, z.B. der Dateimanager Claw4. Ich hab auch in dessen Quelltext gewühlt, aber keine nenneswerten Unterschiede gefunden. Ich bin da etwas ratlos ...

Danke schon mal für die Mühe!

Lars

RapidMax
14-10-2006, 15:17
Ich konnte den Fehler nachvollziehen (pygtk 2.8.6). Nach dem pygtk Referenz Manual sieht dein Code korrekt aus. Ich schliesse mich damit der Meinung von jeebee an, dass es ein Bug in pygtk sein könnte. Meine Recherche im pygtk Bugzilla zeigte keine entsprechenden Bug-Reports (Suche nach popup menu und popup item). Daher solltest du den Fehler melden (http://bugzilla.gnome.org/enter_bug.cgi?product=pygtk) und nicht vergessen dein Beispiel beizulegen.

Gruss, Andy

jeebee
14-10-2006, 17:23
Ich habe soeben noch ein wenig mit dem Code von Claw4 und deinem Beispiel experimentiert und den Unterschied gefunden. Du hast ein
iconView.connect("button-release-event", button_release_cb) wo sowohl ich in meinem Test-C-Programm als vermutlich (habe die Code-Zeile nicht gefunden) auch Claw4 ein
iconView.connect("button-press-event", button_release_cb) haben. Mit der Zeile mit "button-press-event" funktioniert jedenfalls dein Testprogramm

LarsHanson
15-10-2006, 18:26
Jau, hab einfach das falsche Signal benutzt um das Menü aufzurufen. Manchmal hat man aber auch ein Brett vorm Kopp!

Vielen Dank jedenfalls für die Mühe!

Lars