Tkinter 中的多个键事件绑定 - “Control + E"“命令(苹果)+ E"等等 [英] Multiple Key Event Bindings in Tkinter - "Control + E" "Command (apple) + E" etc
问题描述
Mac OS X 10.6.6 - Tkinter
Mac OS X 10.6.6 - Tkinter
我想绑定多键事件,虽然我找到了一篇 effbot 文章和 Tk 手册页,但我无法使其正常工作.我是新来的.
I want to bind multiple-key events, and while I have found an effbot article and the Tk man pages, I've been unable to make this work correctly. I'm new here.
我取得了喜忧参半的成功.我已经能够获得 Shift + 字母键,但不能获得 Control 或 Command(Apple 键).我真正想做的是 Command + letter 和 Control + letter 键,所以理论上它可以在 Windows 和 OS X 中工作.
I've had mixed success. I've been able to get Shift + letter key, but not Control or Command (Apple key). What I really want to do is Command + letter and Control + letter key so it would theoretically work in Windows and OS X.
我希望它在窗口级别工作,所以我使用的是 root.也许有更好的方法.以下是我尝试过的:
I want it to work at window-level, so I'm using root. Perhaps there is a better way. Below is what I've tried:
root.bind('<Shift-E>', self.pressedCmdE) # Works
root.bind('e', self.pressedCmdE) # Works
root.bind('<Command-E>', self.pressedCmdE) # Does Not Work
#root.bind('<Mod1-E>', self.pressedCmdE) # # Do Mod1, M1, and
#root.bind('<M1-E>', self.pressedCmdE) # # Command mean the same thing?
<小时>
奇怪的是,当我按下 alt/option +(E、N 或其他)时,它会产生错误.它是否与 PythonLauncher 交互?
Strangely, when I press alt/option + (E, N, or others) it creates an error. Is it interacting with PythonLauncher?
2011-06-16 16:19:22.618 Python[1546:d07] An uncaught exception was raised
2011-06-16 16:19:22.621 Python[1546:d07] *** -[NSCFString characterAtIndex:]: Range or index out of bounds
2011-06-16 16:19:22.622 Python[1546:d07] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFString characterAtIndex:]: Range or index out of bounds'
*** Call stack at first throw:
(
0 CoreFoundation 0x00007fff85b397b4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x00007fff848b90f3 objc_exception_throw + 45
2 CoreFoundation 0x00007fff85b395d7 +[NSException raise:format:arguments:] + 103
3 CoreFoundation 0x00007fff85b39564 +[NSException raise:format:] + 148
4 Foundation 0x00007fff866eb5e1 -[NSCFString characterAtIndex:] + 97
5 Tk 0x0000000100759bcf Tk_SetCaretPos + 663
6 Tk 0x000000010075fd94 Tk_MacOSXSetupTkNotifier + 699
7 Tcl 0x000000010061d2ae Tcl_DoOneEvent + 297
8 _tkinter.so 0x00000001001d9be9 init_tkinter + 1132
9 Python 0x0000000100089187 PyEval_EvalFrameEx + 15317
10 Python 0x000000010008acce PyEval_EvalCodeEx + 1803
11 Python 0x000000010008935e PyEval_EvalFrameEx + 15788
12 Python 0x000000010008acce PyEval_EvalCodeEx + 1803
13 Python 0x000000010008ad61 PyEval_EvalCode + 54
14 Python 0x00000001000a265a Py_CompileString + 78
15 Python 0x00000001000a2723 PyRun_FileExFlags + 150
16 Python 0x00000001000a423d PyRun_SimpleFileExFlags + 704
17 Python 0x00000001000b0286 Py_Main + 2718
18 Python 0x0000000100000e6c start + 52
)
terminate called after throwing an instance of 'NSException'
Abort trap
推荐答案
这似乎是 Tk 中的一个错误.我在 mac 上使用 tcl/tk 以及使用 python/tkinter 时遇到相同的错误.您可以将 <Command-e>
绑定到小部件(我尝试使用文本小部件),但将其绑定到根窗口或 "all"
似乎会导致你得到的错误.
This appears to be a bug in Tk. I get the same error with tcl/tk on the mac as well as with python/tkinter. You can bind <Command-e>
to a widget (I tried with a text widget) but binding it to the root window or to "all"
seems to cause the error you get.
这篇关于Tkinter 中的多个键事件绑定 - “Control + E"“命令(苹果)+ E"等等的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!