Curses не регистрирует щелчки мыши в Python - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу сделать в Python непослушные крестики (или крестики-нолики в некоторых местах). Здесь - мой код.

import curses
board = {"1A": " ", "2A": " ", "3A": " ", "1B": " ", "2B": " ", "3B": " ", 
"1C": " ", "2C": " ", "3C": " "}

s = curses.initscr()
sh, sw = s.getmaxyx()
w = curses.newwin(sh, sw, 0, 0)
curses.mousemask(1)
w.nodelay(False)


def printboard():
    w.addstr(sh // 2 - 2, sw // 2 - 4, "{} | {} | {}".format(board.get("1A"), board.get("2A"), board.get("3A")))
    w.hline(sh // 2 - 1, sw // 2 - 4, "-", 9)
    w.addstr(sh // 2, sw // 2 - 4, "{} | {} | {}".format(board.get("1B"), board.get("2B"), board.get("3B")))
    w.hline(sh // 2 + 1, sw // 2 - 4, "-", 9)
    w.addstr(sh // 2 + 2, sw // 2 - 4, "{} | {} | {}".format(board.get("1C"), board.get("2C"), board.get("3C")))



while True:
    printboard()
    w.addstr(sh // 2 + 4, 1, "Naught's turn. Click on where you would like to place your naught.")
    w.refresh()
    event = w.getch()
    if event == curses.KEY_MOUSE:
        _, mousex, mousey, _, _ = curses.getmouse()
        print(mousex, mousey)
        w.refresh()

Я прочитал документы, и код выглядит правильно.Когда я запускаю его в терминале, появляется доска, и она печатает текст.Но когда я щелкаю левой кнопкой мыши, программа ничего не делает.Я не знаю, что с ним не так.

РЕДАКТИРОВАТЬ:

Узнайте, почему это не работает.Я просто добавил curses.mousemask(curses.BUTTON1_CLICKED) до w.nodelay(False) и w.keypad(True) после w.nodelay(False).

1 Ответ

0 голосов
/ 19 сентября 2018

short: программа не вызывает keypad

long: Python curses использует ncurses для получения событий мыши.Обратитесь к руководству для getch, где написано

Следующие специальные клавиши определены в <curses.h>.

  • За исключением особого случая KEY_RESIZE, необходимо активировать клавиатуру для getch для возврата этих кодов.

...

  • KEY_MOUSE возвращается для событий мыши (см. curs_mouse(3x)).Этот код зависит от того, был ли включен keypad(3x), потому что (например, с протоколом мыши xterm) ncurses должен читать escape-последовательности, как функциональная клавиша.
...