gpt4 book ai didi

python - 如何在 python-curses 中启用鼠标移动事件

转载 作者:行者123 更新时间:2023-12-04 15:44:52 25 4
gpt4 key购买 nike

我想用 python-curses 检测鼠标移动事件。我不知道如何启用这些事件。我尝试如下启用所有鼠标事件:

stdscr = curses.initscr()
curses.mousemask(curses.REPORT_MOUSE_POSITION | curses.ALL_MOUSE_EVENTS)
while True:
c = stdscr.getch()
if c == curses.KEY_MOUSE:
id, x, y, z, bstate = curses.getmouse()
stdscr.addstr(curses.LINES-2, 0, "x: " + str(x))
stdscr.addstr(curses.LINES-1, 0, "y: " + str(y))
stdscr.refresh()
if c == ord('q'):
break
curses.endwin()

我仅在单击、按下鼠标按钮等时获得鼠标事件,但没有鼠标移动事件。如何启用这些事件?

最佳答案

我通过更改我的 $TERM env var/terminfo 让它工作。在 Ubuntu 上,它只需设置 TERM=screen-256color 即可工作,但在 OSX 上,我必须使用此处的说明编辑一个 terminfo 文件:

Which $TERM to use to have both 256 colors and mouse move events in python curses?

但对我来说格式不同所以我添加了这行:

XM=\E[?1003%?%p1%{1}%=%th%el%;,

为了测试它,我使用了这段 Python 代码(注意 screen.keypad(1) 是非常必要的,否则鼠标事件会导致 getch 返回转义键代码)。

import curses

screen = curses.initscr()
screen.keypad(1)
curses.curs_set(0)
curses.mousemask(curses.ALL_MOUSE_EVENTS | curses.REPORT_MOUSE_POSITION)
curses.flushinp()
curses.noecho()
screen.clear()

while True:
key = screen.getch()
screen.clear()
screen.addstr(0, 0, 'key: {}'.format(key))
if key == curses.KEY_MOUSE:
_, x, y, _, button = curses.getmouse()
screen.addstr(1, 0, 'x, y, button = {}, {}, {}'.format(x, y, button))
elif key == 27:
break

curses.endwin()
curses.flushinp()

关于python - 如何在 python-curses 中启用鼠标移动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56303971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com