2015-02-11 3 views
0

Я нашел этот код в Интернете:всплывающих окон не появляется при нажатии на StatusIcon

#!/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() 

Небольшое меню должно появиться при нажатии правой кнопки мыши на значке состояния, но когда я запускаю код и нажмите, появится меню и немедленно исчезнет.

Любая идея, почему?

ответ

2

Наконец-то я нашел решение: переменное меню уничтожается, когда я оставляю функцию. Поэтому я должен его сохранить. Таким образом, я преобразовал свой код в класс и 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()