2013-04-20 76 views
2

我使用Quartz Event Services送鼠標滾輪事件,像這樣:平滑滾動與Quartz.CoreGraphics在Python

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綁定來平滑地滾動窗口?發佈後

+1

你爲什麼要刪除你的答案?取消刪除並將其標記爲答案。 – 2013-04-20 17:55:08

回答

0

立即它發生,我到滾動事件之間增加一個小的延遲:

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) 

這是順暢了很多工作,並讓我滿意。如果有人有另一種方式做到這一點,我很樂意聽到它!