#submenu
clearMenu = gtk.Menu()
item = gtk.MenuItem("submenu item")
item.connect("activate", lambda w: self.callBackFunction())
clearMenu.append(item)
item.show()
'''TOP level'''
menu = gtk.Menu()
item = gtk.ImageMenuItem("Item1")
img = gtk.Image()
img.set_from_file('image1.png')
item.set_image(img)
menu.append(item)
item.set_submenu(clearMenu) #attach submenu
item.show()
item = gtk.ImageMenuItem("Item2")
img = gtk.Image()
img.set_from_file('image2.png')
item.set_image(img)
item.connect("activate", lambda w: self.callBackFunction())
menu.append(item)
item.show()
我的顶层项“Item2”调用定义的函数“callBackFunction”。但是为什么“子菜单项”没有? 我做错什么了?在
编辑
下面是我如何强制子菜单项启动所需操作的方法:
^{pr2}$但我还是不明白为什么事件“激活”不能在子菜单项上工作,而在顶级菜单项上工作
虽然
"button-press-event"
起作用,但它有一些缺点:对于我自己的应用程序(gPodder),我已经在commit a09b204a中解决了这个问题。在
我们想要的:
"activate"
信号作出反应(对于键盘导航和父菜单项也被单击的情况)"button-press-event"
信号作出反应(以解决错误)"activate"
和{为1。和2。我们可以简单地连接两个信号。 为3。我们可以使用
gobject.idle_add()
。 为4。我们可以使用threading.Semaphore
。在这将导致以下代码:
现在,可以在代码中按如下方式使用它:而不是调用其中一个:
^{pr2}$你改为这样叫:
还有,GNOME Bugzilla中的filed bug 695488。在
这是子菜单焦点explained here固有的问题:
这就解释了为什么键盘导航似乎有效。在
我已经花了一年多的时间来解决这个问题,但是我不知道有什么解决方法-只有你发现的
"button-press-event"
解决方法。在相关问题 更多 >
编程相关推荐