CheckButtonItem kann nicht "getoggled" werden

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Knilch
User
Beiträge: 7
Registriert: Montag 17. Dezember 2007, 02:00
Kontaktdaten:

CheckButtonItem kann nicht "getoggled" werden

Beitragvon Knilch » Sonntag 11. Mai 2008, 15:50

Hallo,
ich versuche in dem submenu eines Status Icons 2 CheckButtonItem's reinzubringen, was auch klappt, allerdings kann ich sie nicht "togglen".

Code: Alles auswählen

#!/usr/bin/env python
# test_check.py
import gtk

def toggle(widget):
   widget.toggled()
   
def on_popup_menu(icn, button, time):
   menu = gtk.Menu()
   item_close = gtk.MenuItem("Beenden")
   item_dialog = gtk.MenuItem("Nachfrage")
   item_close.connect("activate", gtk.main_quit)
   menu.append(item_dialog)
   menu.append(item_close)
   item_close.show()
   item_dialog.show()

   #Submenu
   submenu = gtk.Menu()
   item_dialog.set_submenu(submenu)
   item_sub_request_on = gtk.CheckMenuItem("Aktiviert")
   item_sub_request_off = gtk.CheckMenuItem("Deaktiviert")
   item_sub_request_on.connect("toggled", toggle)
   item_sub_request_off.connect("toggled", toggle)
   submenu.append(item_sub_request_on)
   submenu.append(item_sub_request_off)
   item_sub_request_on.show()
   item_sub_request_off.show()
      
   menu.popup(None, None, None, button, time)
   
icn = gtk.StatusIcon()
icn.set_from_stock(gtk.STOCK_CANCEL)
icn.set_visible(True)
icn.connect("popup-menu", on_popup_menu)

gtk.main()


Ausgabe (nachdem ein Checkbutton angegklickt wird):
$ python test_check.py
Error in sys.excepthook:
RuntimeError: maximum recursion depth exceeded

Original exception was:
RuntimeError: maximum recursion depth exceeded

mfG, Knilch
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Beitragvon fred.reichbier » Sonntag 11. Mai 2008, 16:43

Signal 'toggled':
The "toggled" signal is emitted when the checkmenuitem changes state.

Methode 'toggled()':
The toggle() method emits the "toggled" signal on the checkmenuitem


Kommst du drauf? ;)

Was willst du eigentlich mit dem Signalhandler toggle() anstellen?
Knilch
User
Beiträge: 7
Registriert: Montag 17. Dezember 2007, 02:00
Kontaktdaten:

Beitragvon Knilch » Sonntag 11. Mai 2008, 17:13

fred.reichbier hat geschrieben:Signal 'toggled':
The "toggled" signal is emitted when the checkmenuitem changes state.

Methode 'toggled()':
The toggle() method emits the "toggled" signal on the checkmenuitem


Kommst du drauf? ;)


Irgendwie nicht :?.

fred.reichbier hat geschrieben:Was willst du eigentlich mit dem Signalhandler toggle() anstellen?


Das Ganze sollte im Prinzip nur ein Test unabhaengig vom eigentlichen Programm sein. Eigentlich geht es darum, dass man den Aufruf eines Dialog de/aktivieren kann. Durch den Signalhandler toggle() versprach ich mir eigentlich, dass die jeweilige Box "gecheckt" wird, allerdings habe ich da wohl maechtig was falsch verstanden :?.

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

Beitragvon Trundle » Sonntag 11. Mai 2008, 18:13

Das mit dem "togglen" macht Gtk von alleine für dich, du darfst lediglich nicht immer ein neues Menü erstellen, sondern musst _einmal_ ein Menü erstellen und das immer wieder verwenden (also irgendwo eine Referenz darauf speichern und die benutzen).
Knilch
User
Beiträge: 7
Registriert: Montag 17. Dezember 2007, 02:00
Kontaktdaten:

Beitragvon Knilch » Sonntag 11. Mai 2008, 18:19

Trundle hat geschrieben:Das mit dem "togglen" macht Gtk von alleine für dich, du darfst lediglich nicht immer ein neues Menü erstellen, sondern musst _einmal_ ein Menü erstellen und das immer wieder verwenden (also irgendwo eine Referenz darauf speichern und die benutzen).


Argh, ja natuerlich. Ich hatte nicht darauf geachtet, dass das Menue staendig neu definiert wird wenn man es aufrufen will... Danke :)
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Beitragvon fred.reichbier » Sonntag 11. Mai 2008, 18:35

Zur Ergänzung: du hast in deinem Signalhandler jeweils wieder indirekt den Signalhandler aufgerufen, dann meckert Python natürlich irgendwann ;)
Knilch
User
Beiträge: 7
Registriert: Montag 17. Dezember 2007, 02:00
Kontaktdaten:

Beitragvon Knilch » Sonntag 11. Mai 2008, 18:48

fred.reichbier hat geschrieben:Zur Ergänzung: du hast in deinem Signalhandler jeweils wieder indirekt den Signalhandler aufgerufen, dann meckert Python natürlich irgendwann ;)


Oh, stimmt. Dadurch, dass die Boxes nicht "gecheckt" worden sind kam ich erst mal durcheinander und hatte dann das Problem an einer ganz falschen Stelle angepackt. Naja, vielen Dank nochmal :)

Allerdings habe ich nun noch eine Frage: z.B. Buttons kann man ja mit sozusagen vorgerfertigten Designs, also Stock-Buttons, versehen. Nun wird das z.B. in Gajim auch mit MenuItems gemacht, wie hier zu sehen.

In der Documentation kann ich dazu nichts finden; Ist das denn in Python ueberhaupt moeglich? Weil das ganze Tray-Gedoehns von Gajim ist soweit ich weis in C geschrieben.

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

Beitragvon Trundle » Sonntag 11. Mai 2008, 18:56

Das ist ein ``gtk.ImageMenuItem``.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 11. Mai 2008, 19:23

Knilch hat geschrieben:In der Documentation kann ich dazu nichts finden; Ist das denn in Python ueberhaupt moeglich? Weil das ganze Tray-Gedoehns von Gajim ist soweit ich weis in C geschrieben.

Nein. Gajims Tray hat zwei mögliche Backends: deren eigenes (das müsste wohl auf PyGTK aufsetzen) und gnome-python(-extras, weiß ich jetzt nicht mehr so genau).
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder