2011-06-17 44 views
2

我有以下python(pygtk)程序。当我将鼠标移动到显示的菜单上时,如果点击托盘中的项目,复选框会被选中并立即取消选中。我使用Ubuntu 10.10或11.04。pygtk trayicon程序中的CheckMenuItem问题

#!/usr/bin/python 

import gtk 
import glib 
import subprocess 
import time 
import sys 



class StatusIcon: 
    def __init__(self): 
     self.statusicon = gtk.StatusIcon() 
     self.statusicon.set_from_stock(gtk.STOCK_HOME) 
     self.statusicon.connect("popup-menu", self.right_click_event) 



    def right_click_event(self, icon, button, time): 
     """ 
     We show a menu 
     """ 
     menu = gtk.Menu() 

     submenu = gtk.Menu() 
     menuitem = gtk.MenuItem("1") 
     submenu.append(menuitem) 
     menuitem = gtk.MenuItem("2") 
     submenu.append(menuitem) 

     lst = ["a","b","c"] 

     for item in lst: 
      newmenuitem = gtk.CheckMenuItem(str(item)) 
      newmenuitem.set_submenu(submenu) 
      menu.append(newmenuitem) 

     # Now add all other menu stuff 
     menu.append(gtk.SeparatorMenuItem()) 
     menuexit = gtk.CheckMenuItem("exit") 
     menuexit.connect("button-press-event", self.exit) 
     menu.append(menuexit) 

     # Show the menu 
     menu.show_all() 
     menu.popup(None, None, gtk.status_icon_position_menu, button, time, self.statusicon) 

    def exit(self, widget, event): 
     """ 
     Menu exit pressed 
     """ 
     if event.button == 1: #LEFT 
      print "terminate" 
      gtk.main_quit() 


StatusIcon() 
gtk.main() 
+0

PS:我试过用Ubuntu 10.10和11.04,在这两种情况下它都有这种行为! – 7asd23hasd 2011-06-17 18:16:42

回答

2

当出现复选框时,子菜单会“切换”复选框的状态。您可以通过处理复选框menuitem的切换信号来对抗此行为。

class StatusIcon: 

... 

    def callback(self, widget, data=None): 
    widget.set_active(False) 

... 

    for item in lst: 
     newmenuitem = gtk.CheckMenuItem(str(item)) 
     newmenuitem.connect("toggled", self.callback, "")