我正在尝试在 python/gtk3 中创建一个弹出菜单。到目前为止,我已经尝试了以下代码:
from gi.repository import Gtk
def show_menu(self, *args):
menu = Gtk.Menu()
i1 = Gtk.MenuItem("Item 1")
menu.append(i1)
i2 = Gtk.MenuItem("Item 2")
menu.append(i2)
i2.show()
i1.show()
menu.popup(None, None, None, None, 0, Gtk.get_current_event_time())
print("Done")
window = Gtk.Window()
button = Gtk.Button("Create pop-up")
button.connect("clicked", show_menu)
window.add(button)
window.show_all()
Gtk.main()
但是弹出菜单没有显示?我做错了什么?
请您参考如下方法:
因为 menu 是 show_menu() 函数中的一个局部变量,它没有被任何其他东西引用,它的引用计数降为 0 并在函数结束;不幸的是,这正是您期望看到它的时候。
相反,在全局范围内创建 menu,这样 menu 就不再局限于一个函数,因此它不会在函数结束。
from gi.repository import Gtk
def show_menu(self, *args):
i1 = Gtk.MenuItem("Item 1")
menu.append(i1)
i2 = Gtk.MenuItem("Item 2")
menu.append(i2)
menu.show_all()
menu.popup(None, None, None, None, 0, Gtk.get_current_event_time())
print("Done")
window = Gtk.Window()
button = Gtk.Button("Create pop-up")
menu = Gtk.Menu()
button.connect("clicked", show_menu)
window.connect('destroy', Gtk.main_quit)
window.add(button)
window.show_all()
Gtk.main()
