2011-12-13 2 views
0

Код ниже - это упрощенная версия класса значков панели задач, я не проверил значение GetKeyCode(), чтобы увидеть, является ли это ctrl, поскольку ключевые события для прессы не являются уволена. Должен ли я быть обязательным нажатием клавиш в другом месте?обнаружение ctrl-click на меню панели задач

class TBI(wx.TaskBarIcon): 
    TBMENU_CTRLCLICK= wx.NewId() 

    def __init__(self,frame): 
     wx.TaskBarIcon.__init__(self) 
     self.frame=frame 
     self.ctrl_down=False 

     self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) 
     self.Bind(wx.EVT_KEY_UP, self.OnKeyUp) 
     self.Bind(wx.EVT_MENU, self.OnCtrlClick, id=self.TBMENU_CTRLCLICK) 

    def CreatePopupMenu(self): 
     menu= wx.Menu() 
     if self.ctrl_down: 
      menu.Append(self.TBMENU_CTRLCLICK, "Ctrl Click") 
      menu.AppendSeparator() 
     menu.Append(wx.ID_EXIT, "Exit") 
     return menu 

    def OnKeyDown(self,event): 
     self.ctrl_down=True 
     event.Skip() 

    def OnKeyUp(self,event): 
     self.ctrl_down=False 
     event.Skip() 

ответ

1

Используйте wx.GetKeyState, как так:

import wx 

class TBI(wx.TaskBarIcon): 
    def __init__(self): 
     wx.TaskBarIcon.__init__(self) 
     icon = wx.ArtProvider.GetIcon(wx.ART_FILE_OPEN, wx.ART_TOOLBAR) 
     self.SetIcon(icon, "Icon") 
     self.Bind(wx.EVT_TASKBAR_RIGHT_UP, self.on_right_up) 

    def on_right_up(self, event): 
     if wx.GetKeyState(wx.WXK_CONTROL): 
      print 'ctrl was pressed!' 


app = wx.App(redirect=False) 
icon = TBI() 
app.MainLoop() 

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

Смежные вопросы