Закрывает окно, созданное с помощью wxPython, если использовать pyHook - PullRequest
0 голосов
/ 08 февраля 2012

Этот код работает нормально, однако, когда я нажимаю кнопку сворачивания или закрытия, окно программы останавливается на некоторое время.Причина может быть в HookMouse, без него окно минимизируется и нормально закрывается.Почему?

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()

1 Ответ

1 голос
/ 11 сентября 2013

Кажется, это решит вашу проблему:

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

Я не знаю почему, потому что doc говорит, что деструктор также отцепляет все зарегистрированные хуки.

...