2

我正在使用Quartz Event Services发送鼠标滚轮事件,如下所示:

from Quartz.CoreGraphics import CGEventCreateScrollWheelEvent, CGEventPost, kCGHIDEventTap

def scroll_wheel_up(num_times):
    for _ in xrange(num_times):
        # Scroll up 1 pixel
        event = CGEventCreateScrollWheelEvent(None, 0, 1, 1)
        CGEventPost(kCGHIDEventTap, event)

这可行,但非常不稳定 - 它会跳跃而不是滚动。

我尝试了一些方法来平滑它,比如向上滚动后以较慢的速度向下滚动。我还尝试“减慢”滚动速度:

def scroll_wheel_up(num_times):
    for i in xrange(1, num_times):
        multiplier = 1 - (float(i) / num_times)
        speed = 4 * multiplier
        event = CGEventCreateScrollWheelEvent(None, 0, 1, speed)
        CGEventPost(kCGHIDEventTap, event)

两者都没有成功。有没有办法使用 Quartz 或 PyObjC 绑定以编程方式平滑滚动窗口?

4

1 回答 1

1

发布后我立即想到在滚动事件之间添加一个小延迟:

def scroll_wheel_up(num_times):
    for i in xrange(1, num_times):
        time.sleep(.005)
        multiplier = 1 - (float(i) / num_times)
        speed = 4 * multiplier
        event = CGEventCreateScrollWheelEvent(None, 0, 1, speed)
        CGEventPost(kCGHIDEventTap, event)

这要顺畅得多,并且令我满意。如果有人有其他方法可以做到这一点,我很乐意听到它!

于 2013-04-20T16:59:02.840 回答