2011-10-24 45 views
0

是否有可能将与其它小GtkMenuBar在一起,而不是在该窗口的顶部显示?将GtkMenuBar与其他小部件并置?

或者我可以使用按钮,但是当您将鼠标悬停在这些按钮上时,按钮上的菜单不会像menu那样工作,即当您接近一个menu item时,菜单直接向下弹出,不用点击等menu自动隐藏。我可以制作那样的按钮吗?或其他小部件可能有:label , image , and pop down menu item很酷。

任何想法表示赞赏。

回答

1

也许连接到按钮的“enter-notify-event”和“leave-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() 
+0

你可以提供一个样本?我把“leave-notify-event”连接到那个按钮上,点击它也不会显示一个菜单,太多的事件淹没了这个;再说,如果我连接输入事件,显示菜单,我的程序会卡住,因为太多的事件,以及 – daisy

+0

抱歉耽搁...查看我的编辑和享受! – Louis

+0

有线,没有输出,没有错误,没有窗口显示,我复制整个文本,把它放在'main.py'中,并尝试'python main.py' – daisy

相关问题