我在基于tkinter的程序中有一个功能,可以处理所有按键操作。我想在一个函数中处理所有按键操作。
我能找到测试是否有任何修饰符(Alt
,Ctrl
,state
)的唯一方法是测试事件对象g
属性。但是,我无法找到任何描述此属性用法的文档以及可能含义的不同值。 The closest match I got不是很具描述性。
通过一些测试,我想出了下表。 (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
)的各种组合按下。)
Alt
这是在任何地方记录的,还是我们应该推断出这种信息?我只是试图了解Python文档的工作原理,这与Visual Studio / MSDN完全不同。
为什么event.state
修饰符给出了这样一个奇数标志?
更新:
这是一个更完整的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
面具清单,通过测试得出。
平台:Windows 7,64位,Python 3.4.3,USB键盘和USB鼠标。
{{1}}
答案 0 :(得分:1)
tkinter是Tk的包装器。如果您对Tk有疑问,我知道的最佳来源是https://www.tcl.tk/doc/。
如果你看http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/event-handlers.html我认为你会看到如何做你想做的事。至于记录的位置,我相信这篇文章的作者John Shipman通过使用一些自动化文档工具从tkinter源代码中获取了大量信息。他告诉我他是如何在一封电子邮件中做到的,但这是几年前的事了,我已经忘记了细节。
在我的Mac上(使用Logitech Windows键盘)我得到左右Alt的掩码为0x10,但Shift和Ctrl的值匹配。所以它似乎在某种程度上依赖于平台。当我按下箭头键,功能键或数字键盘键时,我也会获得非零掩码。