2011-12-13 30 views
0

下面的代码是我的任务栏图标类的简化版本,我没有检查GetKeyCode()的值,看看它是否为ctrl,因为按键事件不是被解雇。我应该将键盘按键绑定到别的地方吗?检测任务栏菜单上的ctrl单击

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按住看到它在行动尝试。

相关问题