2012-02-08 57 views
0

此代碼工作正常,但是當我按下最小化或關閉按鈕時,程序窗口會凍結一段時間。原因可能是在HookMouse中,沒有它,窗口最小化和關閉罰款。爲什麼?使用wxPython創建的凍結窗口,如果使用pyHook

import wx 
import pyHook 

class myFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, -1, 'My Frame') 
     self.tc=wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 
     wx.TE_MULTILINE|wx.TE_NOHIDESEL|wx.TE_READONLY) 

     self.hm = pyHook.HookManager() 
     self.hm.KeyDown = self.OnKeyboardEvent 

     self.hm.HookKeyboard() 
     self.hm.MouseLeftDown=self.OnKeyboardEvent 
     self.hm.HookMouse() 

     wx.EVT_CLOSE(self, self.OnClose) 

    def OnGetAO(self, event): 
     self.tc.Value+=event.MessageName+"\n" 

    def OnKeyboardEvent(self, event): 
     wx.CallAfter(self.OnGetAO, event) 

    def OnClose(self, event): 
     del self.hm 
     self.Destroy() 

if __name__ == '__main__': 
    app = wx.PySimpleApp(0) 
    frame = myFrame() 
    app.SetTopWindow(frame) 
    frame.Show() 
    app.MainLoop() 
+0

我認爲一個更好的問題是你在做什麼?你爲什麼要連接鍵盤和鼠標? – 2012-02-08 13:51:38

+0

我需要通過鍵盤和鼠標的全球事件,實際上undestand? – Ambyte 2012-02-09 12:23:58

+0

像加速器表? – 2012-02-09 15:28:34

回答

1

這似乎解決你的問題:

def OnClose(self, event): 
    self.hm.UnhookMouse() 
    event.Skip() 

我不知道爲什麼,因爲doc說析構函數脫鉤所有已註冊的掛鉤了。