2011-05-14 62 views
1

如何使用PyObjC獲取全局滾動事件?可以通過NSEvent調用完成嗎?使用PyObjC獲取全局滾動事件

示例代碼將是巨大的......

+0

你能否詳細說明你的意思是「全局滾動事件」?你想知道什麼時候有任意的滾動視圖移動? (順便說一句,你有沒有得到那些事件水龍頭的工作?我希望如此。) – 2011-05-14 07:17:48

+0

我想知道當用戶使用雙指滾動那裏觸摸板。我不在乎是否有任何實際滾動,我只需要知道用戶何時滾動和滾動多少。我沒有得到我的Event Tap工作......(我有點放棄了一段時間,直到我真的需要讓它工作,也許我會在那之前學習C ......) – Teak 2011-05-14 22:31:26

+0

無論使用什麼應用程序,都可以獲得滾動事件活躍?這可能也需要一個事件點擊......我最近一直在與它混在一起。我會在這個週末再次捅一捅,看看我能不能在你或其他人面前搞清楚。 – 2011-05-14 22:54:37

回答

1

你在正確的軌道上NSEvent!只要你不想修改事件,但只是觀察它,這就像調用addGlobalMonitorForEventsMatchingMask:handler:一樣簡單。只要您指定的類型爲with the mask的事件發佈到另一個應用程序,您的應用程序就會通過回調得到通知。*處理程序參數是一個塊,但需要您不必擔心,因爲PyObjC中的塊參數幾乎比處理更容易在直的Obj-C中:你可以傳遞任何可調用的對象(函數,方法,類等),而橋將處理剩下的事情。這是所有你需要做的:

def callback(event): 
    NSLog(u"%s" % event) 

NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSScrollWheelMask, callback) 

在回調中,你得到的實際事件的副本,你可以查詢之類的東西了deltaX或任何你喜歡。

請注意,就像AppKit中其他許多有趣的方法一樣,這個方法在10.6中是新的,並且不在PyObjC的較舊版本(閱讀:Apple提供的)的元數據文件中。這意味着如果您嘗試使用網橋的默認安裝來構建應用程序,它將會失敗。你將不得不使用更新的版本。


*如果你想獲得張貼到你的應用程序事件,您必須使用addLocalMonitorForEventsMatchingMask:handler:。不幸的是,一個事件監視器無法爲您的應用程序和其他應用程序獲取這兩個事件

+0

好吧,這似乎應該工作,但是當我使用該代碼時,它似乎儘快完成,並且從不調用回調函數。有一個PyObjC運行循環,我必須開始或什麼。原諒我,如果這是一個愚蠢的問題... – Teak 2011-05-15 21:29:51

+0

是的,對不起,這不是一個完整的腳本。您必須將其放入GUI應用程序或啓動您自己的運行循環。我似乎記得你之前的一個問題中有這個部分,對吧? – 2011-05-15 21:40:30

+0

我是PyObjC的新手,是否可以詳細說明如何啓動運行循環?在我之前的問題中,我並不完全明白我在做什麼。 :) – Teak 2011-05-15 22:06:13