如何退出 Tkinter 中的键盘事件?

How do I quit a keyboard event in Tkinter?

我想做一个键盘快捷操作command.When我按'b',打印'b';当我按's',打印's'。这是我的代码:

# -*- coding: utf-8 -*-
from Tkinter import *
import tkFont

root = Tk()

def pri(event):
    print event.char

def rb():
    root.bind('<KeyPress-b>',pri)
    root.bind('<KeyPress-s>',pri)

v = IntVar()
def callbackcheck():
    if v.get():
        rb()
Cb = Checkbutton(root,variable = v,text = 'Hello',onvalue = 1,offvalue  = 0,command = callbackcheck)
Cb.pack()

root.mainloop()

当我设置复选按钮'on'时,键盘事件是activated.But当我设置复选按钮'off'时,键盘事件无法退出,当我按下'b' ,仍然打印 'b'。实际上,键盘事件总是 运行 一旦它是 activated.And 我不知道如何退出键盘 event.Do 你有什么想法吗?

接下来是类似的问题: 当我在 Tkinter 中使用条目时,我只想输入数字,而不是字母,并且我找到了使用 validateCommand 的方法。但是当我单击当前 window 中的其他区域时,我无法退出条目小部件or input letters.I 想在点击其他widget或者输入字母的时候退出进入widget,如何实现?

已编辑

正如 Zetys 指出的那样,您必须取消绑定 key-command 组合。根据您的代码:

# -*- coding: utf-8 -*-
from Tkinter import *
import tkFont

root = Tk()

def pri(event):
    print (event.char)

def rb():
    if v.get():
        root.bind('<KeyPress-b>',pri)
        root.bind('<KeyPress-s>',pri)
    else:
        root.unbind('<KeyPress-b>')
        root.unbind('<KeyPress-s>')

v = BooleanVar()

Cb = Checkbutton(root,variable = v,text = 'Hello', command = rb)
Cb.pack()

root.mainloop()

我改变了一些东西:

  • 我删除了 callbackcheck(rb 现在可以了)
  • 我将 IntVar 更改为 BooleanVar,因此它是 'True' 或 'False'(无需显式调用 onvalue 和 offvalue)。

您应该在设置 Checkbutton 'off' 时删除与 unbind() 的绑定。

if v.get():
    rb()
else:
    root.unbind('<KeyPress-b>')
    root.unbind('<KeyPress-s>')