CheckButtonItem kann nicht "getoggled" werden

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

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

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:

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

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:

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

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:

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

Das ist ein ``gtk.ImageMenuItem``.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
Antworten