2012-08-09 176 views
3

有沒有人知道是否有可能在詛咒中處理鼠標滾輪運動?我想他們應該和箭頭鍵一樣。一個例子將不勝感激。python詛咒鼠標滾輪

謝謝。

回答

3

我想這是系統和終端相關的。我寫了以下內容 - 它只捕獲鼠標狀態並將它們打印到屏幕上。我能夠使用xterm在Mac OSX中接收鼠標滾動事件。 (向上滾動註冊爲我的按鈕4;如向下按鈕2 - 但它並沒有使用原生的終端應用工作)

如果你看看在這段代碼

將變得清晰,你必須使用scr.getch()第一,並測試它是否返回curses.KEY_MOUSE。如果是這樣,那麼可以調用curses.getmouse(),它返回一個包含設備ID,座標和狀態標誌的元組。

import curses 
from contextlib import contextmanager 

@contextmanager 
def open_screen(): 
    scr = curses.initscr() 
    curses.noecho() 
    curses.cbreak() 
    scr.keypad(1) 
    try: 
     yield scr 
    finally: 
     curses.nocbreak() 
     scr.keypad(0) 
     curses.echo() 
     curses.endwin() 

curses_mouse_states = { 
    curses.BUTTON1_PRESSED: 'Button 1 Pressed', 
    curses.BUTTON1_RELEASED: 'Button 1 Released', 
    curses.BUTTON1_CLICKED: 'Button 1 Clicked', 
    curses.BUTTON1_DOUBLE_CLICKED: 'Button 1 Double-Clicked', 
    curses.BUTTON1_TRIPLE_CLICKED: 'Button 1 Triple-Clicked', 

    curses.BUTTON2_PRESSED: 'Button 2 Pressed', 
    curses.BUTTON2_RELEASED: 'Button 2 Released', 
    curses.BUTTON2_CLICKED: 'Button 2 Clicked', 
    curses.BUTTON2_DOUBLE_CLICKED: 'Button 2 Double-Clicked', 
    curses.BUTTON2_TRIPLE_CLICKED: 'Button 2 Triple-Clicked', 

    curses.BUTTON3_PRESSED: 'Button 3 Pressed', 
    curses.BUTTON3_RELEASED: 'Button 3 Released', 
    curses.BUTTON3_CLICKED: 'Button 3 Clicked', 
    curses.BUTTON3_DOUBLE_CLICKED: 'Button 3 Double-Clicked', 
    curses.BUTTON3_TRIPLE_CLICKED: 'Button 3 Triple-Clicked', 

    curses.BUTTON4_PRESSED: 'Button 4 Pressed', 
    curses.BUTTON4_RELEASED: 'Button 4 Released', 
    curses.BUTTON4_CLICKED: 'Button 4 Clicked', 
    curses.BUTTON4_DOUBLE_CLICKED: 'Button 4 Double-Clicked', 
    curses.BUTTON4_TRIPLE_CLICKED: 'Button 4 Triple-Clicked', 

    curses.BUTTON_SHIFT: 'Button Shift', 
    curses.BUTTON_CTRL: 'Button Ctrl', 
    curses.BUTTON_ALT: 'Button Alt' 
} 

with open_screen() as scr: 
    curses.mousemask(-1) 
    while True: 
     c = scr.getch() 
     if c == curses.KEY_MOUSE: 
      mouse_state = curses.getmouse()[4] 
      states = '; '.join(state_string for state, state_string 
           in curses_mouse_states.viewitems() 
           if mouse_state & state) 
      scr.addstr(0, 0, states) 
      scr.clrtoeol() 
      scr.refresh() 
     elif c == ord('q'): 
      break 
+0

太好了,謝謝你的例子。 – user1476056 2012-08-10 18:02:15