pyHook + Tkinter = сбой? - PullRequest
       10

pyHook + Tkinter = сбой?

1 голос
/ 20 июля 2011

Рассмотрим следующий пример:

from Tkinter import *
import pyHook

class Main:
    def __init__(self):
        self.root = Tk()
        self.root.protocol("WM_DELETE_WINDOW", self.onClose)
        self.root.title("Timer - 000")

        self.timerView = Text(self.root, 
                    background="#000", 
                    foreground="#0C0", 
                    font=("Arial", 200), 
                    height=1, 
                    width=3)
        self.timerView.pack(fill=BOTH, expand=1)

        self.timer = 0
        self.tick()

        self.createMouseHooks()

        self.root.mainloop()

    def onClose(self):
        self.root.destroy()

    def createMouseHooks(self):
        self.mouseHook = pyHook.HookManager()
        self.mouseHook.SubscribeMouseAllButtons(self.mouseClick)
        self.mouseHook.HookMouse()

    def mouseClick(self, event):
        self.timer = 300

        return True

    def tick(self):
        self.timerView.delete(1.0, END)
        self.timerView.insert(END, self.threeDigits(self.timer))

        self.root.title("Timer - " + str(self.threeDigits(self.timer)))

        self.timer = self.timer - 1 if self.timer > 0 else 0
        self.root.after(1000, self.tick)

    def threeDigits(self, number):
        number = str(number)
        while len(number) < 3:
            number = "0" + number

        return number

if __name__ == "__main__":
    Main()

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

Это работает, но есть странная ошибка.Когда программа работает и вы перемещаете окно, мышь и программа зависают на 3-4 секунды, а затем программа перестает отвечать на запросы.

Если вы удалите зацепку или асинхронное обновление, ошибка выигранане случилось.

В чем может быть причина этой проблемы?

РЕДАКТИРОВАТЬ:

Я тестировал в Windows 7 с Python 2.6.

...