Skip to main content
 首页 » 编程设计

Python Gtk3 右键菜单

2025年05月04日17xxx_UU

我正在尝试在 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()