微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ncurses:如何检查鼠标的左键或右键单击?

如何解决ncurses:如何检查鼠标的左键或右键单击?

考虑该程序:

import _curses # _curses.pyd supplied locally for python27 win32
import curses

screen = curses.initscr()
#curses.noecho() 
curses.curs_set(0)
screen.keypad(1)
curses.mousemask(curses.ALL_MOUSE_EVENTS)

screen.addstr("This is a Sample Curses Script\n\n")

key=0
while key!=27: # Esc to close
    key = screen.getch()
    #screen.erase()
    if key == curses.KEY_MOUSE:
        _,mx,my,_,bstate = curses.getmouse()
        if bstate & curses.BUTTON1_CLICKED:
            screen.addstr(" left was clicked")
        else:
            screen.addstr(" right was clicked")
        screen.refresh()

screen.endwin()

我在linux上尝试过,但是它不能正确显示单击的按钮,有时可以正确显示,有时不能。我注意到bstate的右键小于10。它恰好是4,但bstate有时是4,有时是2,依此类推。而左键的它是1000以上。我能用这种观察来获得被点击的按钮吗?

解决方法

尝试使用此脚本检测左键和右键:

import _curses # _curses.pyd supplied locally for python27 win32
import curses

screen = curses.initscr()
#curses.noecho() 
curses.curs_set(0) 
screen.keypad(1) 
curses.mousemask(curses.ALL_MOUSE_EVENTS)

screen.addstr("This is a Sample Curses Script\n\n") 

key=0
while key!=27: # Esc to close
    key = screen.getch()
    #screen.erase()
    if key == curses.KEY_MOUSE:
        _,mx,my,_,bstate = curses.getmouse()
        y,x = screen.getyx()
        if (bstate & curses.BUTTON1_PRESSED != 0 or
                bstate & curses.BUTTON1_CLICKED != 0):
            screen.addstr(my,"left was clicked")
        elif (bstate & curses.BUTTON3_PRESSED != 0 or
                bstate & curses.BUTTON3_CLICKED != 0):
            screen.addstr(my,"right was clicked")
    screen.refresh()

curses.endwin()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。