Рассмотрим следующий пример:
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.