繁体   English   中英

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

[英]How do I quit a keyboard event in Tkinter?

我要发出键盘快速操作命令。当我按“ 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()

当我将Checkbutton设置为“ on”时,键盘事件被激活。但是当我将Checkbutton设置为“ off”时,键盘事件无法退出,而当我按下“ b”时,仍然打印“ b”。实际上,键盘事件总是运行一旦它被激活。我不知道如何退出键盘事件。您有什么想法吗?

接下来是一个类似的问题:当我在Tkinter中使用条目时,我只想要输入数字,而不是字母,并且找到了一种使用validateCommand 。但是,当我单击当前窗口中的其他区域或输入时,无法退出条目小部件。我想单击其他窗口小部件或输入字母时退出输入窗口小部件,如何实现此目标?

已编辑

正如Zetys指出的那样,您必须取消键盘与键盘的绑定。 根据您的代码:

# -*- 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>')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM