我想制作键盘快速操作命令。当我按'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
的方法。但是当我点击当前窗口中的其他区域或输入字母时,我无法退出条目小部件。当我点击其他小部件或输入字母时,我想退出条目小部件,我该如何实现这个目标?
答案 0 :(得分:2)
EDITED
正如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()
我改变了一些事情:
答案 1 :(得分:1)
当您将Checkbutton设置为“off”时,您应该使用if v.get():
rb()
else:
root.unbind('<KeyPress-b>')
root.unbind('<KeyPress-s>')
删除绑定。
insert into query (date_time, userid, user_traits, query_sql, status, description, is_scheduled_row)
VALUES ("2016-01-06 02:39:01","307","0,3598,1937,13891,37746,22082,2596,2431,12850,3917,1234784,44712,14638,14418,12850,2631,25003,11428,27450,2592,23593,11441,2826,36330,32219,32351,20720,13997,2594,2467,15687","Select * from gl_base_schema.item where national_status_cd = 'A'","in queue"," (Scheduled Query #413) Pull all items where National Status Code is 'A'", 1)