如何退出 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>')
我想做一个键盘快捷操作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>')