time.sleep需要整数吗?

8

我正在编写一个宏,当我按下一个键时,它会点击屏幕上的某些位置。

第一次按下键时,一切运行良好。
然而,任何其他按键都会导致错误:

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

似乎第一次由pyHook运行DeleteRun函数时,time.sleep()接受浮点数。
在任何后续的函数调用中,它似乎只接受整数。
是什么导致这种情况发生?
我不能等待5秒钟来排列鼠标!它应该节省时间!
规格:
python 2.7.2
Windows 7 (32)

1
你能做到 import time as time_safe 并使用 time_safe 替换 time 吗?也许 pyHook 在处理 time 类。 - Blender
很抱歉,没有成功。不过我注意到它会交替工作和失败。 - Anti Earth
也许可以尝试明确地使用 from time import sleep - Karl Knechtel
在导入任何其他模块之前,请尝试使用 import time,functools 并使用 Sleep = functools.partial(time.sleep, 0.1),然后在 DeleteRun(event): ... Sleep() ... 中使用。 - jfs
两者都不行:"sleep() TypeError: 需要一个整数"。 - Anti Earth
你的代码堆栈中明确出现了哪个错误?有可能是在代码的其他部分调用 time.sleep 引起的。 - MrGomez
2个回答

5
好的,这样怎么样?在DeleteRun中添加一个return True:
def DeleteRun(event):
    Click(1250, 741)
    time.sleep(0.1)
    [...]
    return True

我应该坦白地说,这只是一些基本的谷歌搜索技巧:阅读这个问题的答案。


又出现了一个问题,可能与之前的有关。 - Anti Earth

-1

我不确定这次 Windows 出了什么问题,但是你可以尝试使用没有文件描述符的 select() 来模拟高精度睡眠。


你能给我一个实现的例子吗? - Anti Earth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接