Сопоставить GtkMenuBar с другими виджетами? - PullRequest
0 голосов
/ 24 октября 2011

Можно ли разместить GtkMenuBar вместе с другими виджетами вместо отображения в верхней части этого окна?

Или я мог бы использовать кнопки, но когда вы наводите указатель мыши на эти кнопки, меню на кнопках не будет вести себя как menu, то есть, когда вы находитесь рядом с одним menu item, меню выскакивает прямо, без щелчка, а другие menu скрываются автоматически. Могу ли я сделать такие кнопки? Или другие виджеты, которые могут иметь: label , image , and pop down menu item это круто.

Любые идеи приветствуются.

1 Ответ

1 голос
/ 24 октября 2011

Может быть, "enter-notify-event" и "exit-notify-event", связанные с кнопками, могут помочь вам в этом, например, всплывающее меню показывает и скрывает соответственно.


РЕДАКТИРОВАТЬ

Я, наконец, забыл те события "вход" и "уход", поведение которых было немного сложным, и просто использовал "движение-уведомление-событие" ...

Теперь я надеюсь, что это то, что вы хотите!

#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk

class MenuExample:
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_size_request(200, 100)
        self.window.set_title("GTK Menu Test")
        self.window.connect("delete_event", lambda w,e: gtk.main_quit())

        # A vbox to put a button in:
        vbox = gtk.VBox(False, 0)
        self.window.add(vbox)
        vbox.show()
        self.popped = False

        # Create a button to simulate a menu
        button = gtk.Button("press me")
        vbox.pack_start(button, False, False, 2)
        self.window.add_events(gtk.gdk.POINTER_MOTION_MASK)
        self.window.connect("motion-notify-event", self.wakeup)
        self.window.show_all()
        self.bmenu = gtk.Button("A single entry menu")
        self.bmenu.connect("clicked", self. menuitem_response, "Click on the magic menu !")
        vbox.pack_start(self.bmenu, False, False, 2)

    def wakeup(self, widget, event):
        #print "Event number %d woke me up" % event.type
        (x, y) = self.window.get_pointer() 
        if y < 30:
            if self.popped == False:
                self.popped = True
                self.bmenu.show()
        elif y > 60:
            if self.popped == True:
                self.popped = False
                self.bmenu.hide()

    # Print a string when a menu item is selected
    def menuitem_response(self, widget, string):
        print "%s" % string

def main():
    gtk.main()
    return 0

if __name__ == "__main__":
    MenuExample()
    main()
...