python curses constant names for mouse wheel movements?

pjfarley3 at earthlink.net pjfarley3 at earthlink.net
Sun Mar 7 02:16:46 EST 2021


I have a python curses project trying to detect mouse wheel movements, and I
understand that mouse wheel events by convention are reported as BUTTON4 and
BUTTON5 events.

I am running on a Win10 system with python 3.8.7 and windows-curses 2.2.0,
which I am given to understand uses the gohlke PDCurses wheels for the
underlying curses implementation.

I can display the values of all of the BUTTON1 to BUTTON4 event constants
but python 3.8.7 barfs if I try to use any BUTTON5 event names.  It also
does not recognize the BUTTONn_RESERVED_EVENT names for buttons 1-4.

print(       "B1={:08x},{:08x},{:08x},{:08x},{:08x}\n".format(
                    curses.BUTTON1_RELEASED, curses.BUTTON1_PRESSED,
curses.BUTTON1_CLICKED, 
                    curses.BUTTON1_DOUBLE_CLICKED,
curses.BUTTON1_TRIPLE_CLICKED) + \
                "B2={:08x},{:08x},{:08x},{:08x},{:08x}\n".format(
                    curses.BUTTON2_RELEASED, curses.BUTTON2_PRESSED,
curses.BUTTON2_CLICKED, 
                    curses.BUTTON2_DOUBLE_CLICKED,
curses.BUTTON2_TRIPLE_CLICKED) + \
                "B3={:08x},{:08x},{:08x},{:08x},{:08x}\n".format(
                    curses.BUTTON3_RELEASED, curses.BUTTON3_PRESSED,
curses.BUTTON3_CLICKED, 
                    curses.BUTTON3_DOUBLE_CLICKED,
curses.BUTTON3_TRIPLE_CLICKED) + \
                "B4={:08x},{:08x},{:08x},{:08x},{:08x}\n".format(
                    curses.BUTTON4_RELEASED, curses.BUTTON4_PRESSED,
curses.BUTTON4_CLICKED, 
                    curses.BUTTON4_DOUBLE_CLICKED,
curses.BUTTON4_TRIPLE_CLICKED) + \
                "S/C/A={:08x},{:08x},{:08x}".format(
                    curses.BUTTON_SHIFT, curses.BUTTON_CTRL,
curses.BUTTON_ALT))

yields this output:

B1=00000001,00000002,00000004,00000008,00000010
B2=00000020,00000040,00000080,00000100,00000200
B3=00000400,00000800,00001000,00002000,00004000
B4=00008000,00010000,00020000,00040000,00080000
S/C/A=04000000,08000000,10000000

Any attempt to use a BUTTON5 constant name or BUTTONn_RESERVED_EVENT
constant name fails:

Python 3.8.7 (tags/v3.8.7:6503f05, Dec 21 2020, 17:59:51) [MSC v.1928 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import curses
>>> print("B5={:08x}".format(curses.BUTTON5_RELEASED))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'curses' has no attribute 'BUTTON5_RELEASED'
>>> print("B5={:08x}".format(curses.BUTTON1_RESERVED_EVENT))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'curses' has no attribute 'BUTTON1_RESERVED_EVENT'

When I actually capture mouse wheel events, the wheel-up event is reported
as 0x00010000 or BUTTON4_PRESSED, but the wheel-down event is reported as 0x
00200000, which has no constant name associated with it for which I can find
any documentation.

This is a logging trace if curses.get_wch() and curses.getkey() results and
the curses.getmouse() results when KEY_MOUSE is returned.  I have manually
annotated the getmouse display lines indicating what mouse action I actually
performed.

DEBUG:root:wch='539' = 0x021b at (0,0)
DEBUG:root:3ch='KEY_MOUSE at (0,0)'
DEBUG:root:3ch KEY_MOUSE detected at (0,0)
DEBUG:root:Mouse data id=0, x=60, y=31, z=0, bs=00000004
Button 1 click
DEBUG:root:wch='539' = 0x021b at (0,0)
DEBUG:root:3ch='KEY_MOUSE at (0,0)'
DEBUG:root:3ch KEY_MOUSE detected at (0,0)
DEBUG:root:Mouse data id=0, x=-1, y=-1, z=0, bs=00010000
wheel up once
DEBUG:root:wch='539' = 0x021b at (0,0)
DEBUG:root:3ch='KEY_MOUSE at (0,0)'
DEBUG:root:3ch KEY_MOUSE detected at (0,0)
DEBUG:root:Mouse data id=0, x=-1, y=-1, z=0, bs=00200000
wheel down once
DEBUG:root:wch='539' = 0x021b at (0,0)
DEBUG:root:3ch='KEY_MOUSE at (0,0)'
DEBUG:root:3ch KEY_MOUSE detected at (0,0)
DEBUG:root:Mouse data id=0, x=-1, y=-1, z=0, bs=00010000
wheel up once
DEBUG:root:wch='539' = 0x021b at (0,0)
DEBUG:root:3ch='KEY_MOUSE at (0,0)'
DEBUG:root:3ch KEY_MOUSE detected at (0,0)
DEBUG:root:Mouse data id=0, x=-1, y=-1, z=0, bs=00200000
wheel down once

Where can I find any documentation of the correct curses constant name(s) to
use for detecting a "wheel down" action?  Or do I just have to manually
define my own BUTTON5 constant name for the wheel-down event?

TIA for any help or RTFM you can provide.

Peter




More information about the Python-list mailing list