Python 文档 and/or 缺乏(例如键盘 event.state)

Python Documentation and/or Lack Thereof (e.g. keyboard event.state)

我在基于 tkinter 的程序中有一个函数可以处理所有按键。我想在一个函数中处理所有按键。

我能找到的测试是否按下任何修饰符(ShiftAltCtrl)的唯一方法是测试事件对象的 state 属性。但是,我找不到任何描述此属性用法以及不同值可能意味着什么的文档。 The closest match I got 描述性不强。

通过做一些测试,我想出了以下 table。 (先单独按下 g 键,然后按各种组合(ShiftAltCtrl)。)

## keysym  Shift   Alt     Ctrl    event.state   state as binary (LSB is on the right)
##  g                               8             ....... ........ ........ ....1...
##  G       []                      9             ....... ........ ........ ....1..1
##  g               []              131080        ....... ......1. ........ ....1...
##  g                       []      12            ....... ........ ........ ....11..
##  G       []      []              131081        ....... ......1. ........ ....1..1
##  g               []      []      131084        ....... ......1. ........ ....11..
##  G       []              []      13            ....... ........ ........ ....11.1
##  G       []      []      []      131085        ....... ......1. ........ ....11.1

这是否在任何地方记录,或者我们应该推断出此类信息?我只是想了解 Python 文档的工作原理,这与 Visual Studio/MSDN.

完全不同

为什么 Alt 修饰符被赋予如此奇怪的标志?

更新: 这是通过测试得出的更完整的 event.state 掩码列表。

平台:Windows7,64 位,Python3.4.3,USB 键盘和 USB 鼠标。

Mask    | Modifier            
--------+---------------------
 0x0001 | Shift_L, Shift_R    
 0x0002 | Caps_Lock           
 0x0004 | Control_L, Control_R
 0x0008 | Num_Lock            
 0x0100 | Mouse Button 1      
 0x0200 | Mouse Button 2      
 0x0400 | Mouse Button 3      
0x20000 | Alt_L, Alt_R 

tkinter 是 Tk 的包装器。如果您对 Tk 有疑问,我知道的最佳来源是 https://www.tcl.tk/doc/

如果你看看 http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/event-handlers.html 我想你会明白如何做你想做的事。至于记录在何处,我相信 this post 的作者 John Shipman 通过使用一些自动文档工具从 tkinter 源代码中获得了很多他的信息。他在邮件里告诉我他是怎么做到的,但那是好几年前的事了,我忘记了细节。

在我的 Mac(使用 Logitech Windows 键盘)上,尽管 Shift 和 Ctrl 的值匹配,但我的左 Alt 和右 Alt 的掩码均为 0x10。所以它在某种程度上似乎确实依赖于平台。当我按箭头键、功能键或数字键盘键时,我也会得到非零掩码。