2011-12-13 44 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按住看到它在行動嘗試。

相關問題