Python 文档 and/or 缺乏(例如键盘 event.state)
Python Documentation and/or Lack Thereof (e.g. keyboard event.state)
我在基于 tkinter 的程序中有一个函数可以处理所有按键。我想在一个函数中处理所有按键。
我能找到的测试是否按下任何修饰符(Shift
、Alt
、Ctrl
)的唯一方法是测试事件对象的 state
属性。但是,我找不到任何描述此属性用法以及不同值可能意味着什么的文档。 The closest match I got 描述性不强。
通过做一些测试,我想出了以下 table。 (先单独按下 g
键,然后按各种组合(Shift
、Alt
、Ctrl
)。)
## 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。所以它在某种程度上似乎确实依赖于平台。当我按箭头键、功能键或数字键盘键时,我也会得到非零掩码。
我在基于 tkinter 的程序中有一个函数可以处理所有按键。我想在一个函数中处理所有按键。
我能找到的测试是否按下任何修饰符(Shift
、Alt
、Ctrl
)的唯一方法是测试事件对象的 state
属性。但是,我找不到任何描述此属性用法以及不同值可能意味着什么的文档。 The closest match I got 描述性不强。
通过做一些测试,我想出了以下 table。 (先单独按下 g
键,然后按各种组合(Shift
、Alt
、Ctrl
)。)
## 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。所以它在某种程度上似乎确实依赖于平台。当我按箭头键、功能键或数字键盘键时,我也会得到非零掩码。