Skip to main content
 首页 » 编程设计

python之在 Python 中使用 Quartz.CoreGraphics 平滑滚动

2025年05月04日6artech

我正在使用 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 绑定(bind)以编程方式平滑地滚动窗口吗?

请您参考如下方法:

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

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) 

这更顺畅,而且效果令我满意。如果有人有其他方法可以做到这一点,我很乐意听到!