python类getmouse()的实例源码

screen.py 文件源码 项目:sciibo 作者: fdev 项目源码 文件源码 阅读 21 收藏 0 点赞 0 评论 0
def get_mouse(self, screen):
        try:
            id, x, y, z, bstate = curses.getmouse()
            screen_y, screen_x, clip_h, clip_w = self.clip_size()
            y -= screen_y
            x -= screen_x

            # Ignore clicks outside clipped screen
            if y < clip_h and x < clip_w:
                return self.mouse_target(screen, y, x)
        except curses.error:
            pass
anonymine.py 文件源码 项目:anonymine 作者: oskar-skog 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def input(self, engine):
        '''This method is called by `engine.play_game`.

        It receives a character from the user and interprets it.
        Invokes `self.travel` for the steering of the cursor.

        It doesn't do any output except for printing the field
        initialization message, and forcing the entire screen to be
        redrawn on unrecognised input (to de-fuck-up the screen).
        '''
        if self.gametype == 'hex':
            direction_keys = self.direction_keys['hex']
        else:
            direction_keys = self.direction_keys['square']
        look_for = ['reveal', 'flag', 'toggle-attention'] + direction_keys
        # Receive input from player.
        ch = self.window.getch()
        # Interpret.
        command = None
        if ch == curses.KEY_MOUSE:
            _, x, y, _, buttons = curses.getmouse()
            valid = True
            if self.gametype == 'hex':
                valid = self.mouse_travel_hex(x, y, engine.field)
            else:
                valid = self.mouse_travel_square(x, y, engine.field)
            if valid:
                for tmp_command in ('flag', 'reveal'):
                    for mask in self.cfg['curses-mouse-input'][tmp_command]:
                        if buttons & mask:
                            command = tmp_command
                    else:
                        continue
                    break
        else:
            # Keyboard input:
            for key in look_for:
                if ch in self.cfg['curses-input'][key]:
                    command = key
        # Act.
        if command == 'flag':
            engine.flag(self.cursor)
        elif command == 'reveal':
            pre_game = engine.game_status == 'pre-game'
            if pre_game:
                self.message('Initializing field...   This may take a while.')
                curses.reset_shell_mode()   # BUG: see comments above __init__
            engine.reveal(self.cursor)
            if pre_game:
                curses.reset_prog_mode()    # BUG: see comments above __init__
                # Clear junk that gets on the screen from impatient players.
                self.window.redrawwin()
        elif command in direction_keys:
            self.travel(engine.field, command)
        elif command == 'toggle-attention':
            self.attention_mode = not self.attention_mode
        elif ch != curses.KEY_MOUSE:
            # Don't do this all the time, that'd be a little wasteful.
            self.window.redrawwin()
curses_display.py 文件源码 项目:Adwear 作者: Uberi 项目源码 文件源码 阅读 24 收藏 0 点赞 0 评论 0
def _encode_mouse_event(self):
        # convert to escape sequence
        last = next = self.last_bstate
        (id,x,y,z,bstate) = curses.getmouse()

        mod = 0
        if bstate & curses.BUTTON_SHIFT:    mod |= 4
        if bstate & curses.BUTTON_ALT:        mod |= 8
        if bstate & curses.BUTTON_CTRL:        mod |= 16

        l = []
        def append_button( b ):
            b |= mod
            l.extend([ 27, ord('['), ord('M'), b+32, x+33, y+33 ])

        if bstate & curses.BUTTON1_PRESSED and last & 1 == 0:
            append_button( 0 )
            next |= 1
        if bstate & curses.BUTTON2_PRESSED and last & 2 == 0:
            append_button( 1 )
            next |= 2
        if bstate & curses.BUTTON3_PRESSED and last & 4 == 0:
            append_button( 2 )
            next |= 4
        if bstate & curses.BUTTON4_PRESSED and last & 8 == 0:
            append_button( 64 )
            next |= 8
        if bstate & curses.BUTTON1_RELEASED and last & 1:
            append_button( 0 + escape.MOUSE_RELEASE_FLAG )
            next &= ~ 1
        if bstate & curses.BUTTON2_RELEASED and last & 2:
            append_button( 1 + escape.MOUSE_RELEASE_FLAG )
            next &= ~ 2
        if bstate & curses.BUTTON3_RELEASED and last & 4:
            append_button( 2 + escape.MOUSE_RELEASE_FLAG )
            next &= ~ 4
        if bstate & curses.BUTTON4_RELEASED and last & 8:
            append_button( 64 + escape.MOUSE_RELEASE_FLAG )
            next &= ~ 8

        if bstate & curses.BUTTON1_DOUBLE_CLICKED:
            append_button( 0 + escape.MOUSE_MULTIPLE_CLICK_FLAG )
        if bstate & curses.BUTTON2_DOUBLE_CLICKED:
            append_button( 1 + escape.MOUSE_MULTIPLE_CLICK_FLAG )
        if bstate & curses.BUTTON3_DOUBLE_CLICKED:
            append_button( 2 + escape.MOUSE_MULTIPLE_CLICK_FLAG )
        if bstate & curses.BUTTON4_DOUBLE_CLICKED:
            append_button( 64 + escape.MOUSE_MULTIPLE_CLICK_FLAG )

        if bstate & curses.BUTTON1_TRIPLE_CLICKED:
            append_button( 0 + escape.MOUSE_MULTIPLE_CLICK_FLAG*2 )
        if bstate & curses.BUTTON2_TRIPLE_CLICKED:
            append_button( 1 + escape.MOUSE_MULTIPLE_CLICK_FLAG*2 )
        if bstate & curses.BUTTON3_TRIPLE_CLICKED:
            append_button( 2 + escape.MOUSE_MULTIPLE_CLICK_FLAG*2 )
        if bstate & curses.BUTTON4_TRIPLE_CLICKED:
            append_button( 64 + escape.MOUSE_MULTIPLE_CLICK_FLAG*2 )

        self.last_bstate = next
        return l


问题


面经


文章

微信
公众号

扫码关注公众号