单击StatusIcon时不会出现弹出菜单

2024-10-03 09:09:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我在网上发现了这样的代码:

#!/usr/bin/env python3

from gi.repository import Gtk

def popup_menu(icon, button, time):

    menu = Gtk.Menu()

    menuitemAbout = Gtk.MenuItem(label="About")
    menu.append(menuitemAbout)
    menuitemQuit = Gtk.MenuItem(label="Quit")
    menu.append(menuitemQuit)
    menu.show_all()

    menu.popup(None, None, None, None, button, time)

statusicon = Gtk.StatusIcon()
statusicon.set_from_stock(Gtk.STOCK_HOME)
statusicon.set_title("StatusIcon")
statusicon.connect("popup-menu", popup_menu)

window = Gtk.Window()
window.connect("destroy", lambda q: Gtk.main_quit())
window.show_all()

Gtk.main()

当我右键单击状态图标时,应该会出现一个小菜单,但是当我运行代码并单击时,菜单出现并立即消失。在

知道为什么吗?在


Tags: 代码fromnonegtktimebuttonwindowlabel
1条回答
网友
1楼 · 发布于 2024-10-03 09:09:51

最后,我找到了一个解决方案:当我离开函数时,变量菜单会被破坏。所以我必须保存它。 因此,我将代码转换为一个类,menu保存在一个属性中:

#!/usr/bin/env python3

from gi.repository import Gtk

class Menu:
    def __init__(self):
        statusicon = Gtk.StatusIcon()
        statusicon.set_from_stock(Gtk.STOCK_HOME)
        statusicon.set_title("StatusIcon")
        statusicon.connect("popup-menu", self.popup_menu)

        window = Gtk.Window()
        window.connect("destroy", lambda q: Gtk.main_quit())
        window.show_all()

        Gtk.main()

    def popup_menu(self, icon, button, time):
        print(time, button)

        self.menu = Gtk.Menu()

        menuitemAbout = Gtk.MenuItem(label="About")
        self.menu.append(menuitemAbout)
        menuitemQuit = Gtk.MenuItem(label="Quit")
        self.menu.append(menuitemQuit)
        self.menu.show_all()

        self.menu.popup(None, None, None, None, button, time)

Menu()

相关问题 更多 >