time.sleep требует целых чисел? - PullRequest
8 голосов
/ 19 марта 2012

Я пишу макрос, который будет нажимать на определенные места на экране, когда я нажимаю клавишу.

При первом нажатии клавиши все работает нормально.
Однако любое другое нажатие клавиши приводит к ошибке:

    time.sleep(0.1)
TypeError: an integer is required

Вот код:

import win32api
import win32con
import time
import pythoncom
import pyHook
import os

def Click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

def DeleteRun(event):
    Click(1250, 741)
    time.sleep(0.1)
    Click(649,261)
    time.sleep(0.1)
    Click(651, 348)
    time.sleep(0.1)
    Click(800, 442)
    time.sleep(0.1)
    Click(865, 612)


Click(20,20)
KeyGrabber = pyHook.HookManager()
KeyGrabber.KeyDown = DeleteRun
KeyGrabber.HookKeyboard()
pythoncom.PumpMessages()

Кажется, первый раз, когда DeleteRun функция запускается pyHook, time.sleep() принимает значения с плавающей точкой.
При любом следующем вызове функции кажется, что он принимает только целые числа.

Что вызывает это?
Я не могу ждать 5 секунд для расположения мыши! Это должно сэкономить время!

Технические характеристики:

  • python 2.7.2
  • Windows 7 (32)

Ответы [ 2 ]

5 голосов
/ 19 марта 2012

Хорошо, а как насчет этого? Добавить возврат True в DeleteRun:

def DeleteRun(event):
    Click(1250, 741)
    time.sleep(0.1)
    [...]
    return True

Вероятно, я должен признаться, что это было немного больше, чем google-fu: прочитайте ответ на на этот вопрос .

0 голосов
/ 19 марта 2012

Я не уверен, что на этот раз не так с Windows, но вы можете попробовать подделать высокоточный сон, используя select () без файловых дескрипторов.

...