2016-07-20 30 views
1

So habe ich eine grundlegende Menüstruktur:Anbringen/Klonen ein Untermenü mehr als ein Menüpunkt

menu = gtk.menu() 
item1 = gtk.MenuItem('Item 1') 
item2 = gtk.MenuItem('Item 2') 
menu.append(item1) 
menu.append(item2)` 
menu.show_all() 

Und ich habe ein Untermenü:

submenu = gtk.menu() 
subitem1 = gtk.MenuItem('Option 1') 
subitem2 = gtk.MenuItem('Option 2') 
submenu.append(subitem1) 
submenu.append(subitem2) 
submenu.show_all() 

Jetzt möchte ich das gleiche Untermenü befestigen Struktur zu beiden Menüpunkten der obersten Ebene. Mein erster Gedanke war, dass das einfache Hinzufügen .set_submenu(submenu) sowohl auf item1 und item2 sollte funktionieren, aber es gibt mir den Fehler:

Gtk-WARNING **: gtk_menu_attach_to_widget(): menu already attached to GtkMenuItem 

und das Untermenü zeigt nur auf den letzten Punkt, um ihn zu befestigt war.

In der Praxis habe ich viel mehr als zwei Top-Level-Elemente, und ich muss die gleiche Untermenüstruktur an die meisten von ihnen anhängen. Daher ist es nicht wirklich eine Option, die gleiche Untermenüstruktur für jedes Element zu definieren. Was ist der richtige Weg, dies zu tun?

+0

Dies scheint wie eine seltsame Struktur. Warum das gleiche Untermenü für mehrere Gegenstände definieren? Mache einfach ein Menü und entscheide über das Element, zu dem es passt, indem du dir ansiehst, auf welches Element der Benutzer mit der rechten Maustaste geklickt hat :) – joaquinlpereyra

+0

@joaquinlpereyra Uh, kein Rechtsklick (nur schwebend), aber ich bekomme den Drift. Ich habe ähnliche Sachen in Javascript gemacht, aber ich weiß nicht, wie man es in Python macht. Irgendwelche Beispiele? – Razor

+0

Mhmmm, Schweben scheint wie eine Herausforderung. Können Sie erkennen, wo der Benutzer schwebt? Was soll das Widget unter diesem Menü sein? – joaquinlpereyra

Antwort

0

Da die Warnung, die Sie auf dem Terminal erhalten, angibt, können Sie die gleiche Instanz von GtkMenu nicht an verschiedene Menüs anhängen - so wie Sie das gleiche Widget nicht zu mehreren Containern hinzufügen können.

Ihre Menü-Hierarchie scheint zu komplex zu sein, wenn Sie das gleiche Untermenü an mehreren Stellen benötigen. Es wird zweifellos Benutzer verwirren, die auf Positionsspeicher angewiesen sind, um Aktionen in einer hierarchischen Menüstruktur zu finden.

In jedem Fall, wenn Sie immer noch Menüs wiederholen möchten, können Sie eine einfache "Menü Factory" -Funktion verwenden und mehrere Instanzen aus einer gemeinsamen GtkBuilder XML-Beschreibung des Menüs generieren.