【问题标题】:Juxtapose a GtkMenuBar with other widgets?将 GtkMenuBar 与其他小部件并置?
【发布时间】:2011-10-25 22:06:51
【问题描述】:

是否可以将 GtkMenuBar 与其他小部件放在一起,而不是显示在该窗口的顶部?

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

感谢任何想法。

【问题讨论】:

    标签: menu gtk widget


    【解决方案1】:

    也许连接到按钮的“enter-notify-event”和“leave-notify-event”可以帮助您完成操作,例如分别显示和隐藏弹出菜单。


    编辑

    我终于忘记了那些行为有点复杂的“进入”和“离开”事件,只使用了“motion-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()
    

    【讨论】:

    • 你能提供一个样品吗?我将“离开通知事件”连接到该按钮,单击它也不会显示菜单,太多事件淹没了这个;此外,如果我连接 enter 事件以显示菜单,我的程序也会因为事件太多而卡住
    • 有线,没有输出,没有错误,没有窗口显示,我复制了整个文本,把它放在main.py 并尝试python main.py
    • 尝试将窗口大小更改为(500,400)并添加“self.window.set_position(gtk.WIN_POS_CENTER)”以使其位于屏幕中间?
    • 我错过了实例化类的最后 3 行 .. 抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2018-11-23
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多