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 に答える