我正在尝试创建一个简单的应用程序,在键入时扰乱键盘字母。我正在使用python和tkinter。我有一个文本小部件,我需要在我的应用程序中禁用密钥选项卡。我尝试使用以下代码。
text.bind("<Tab>", no_op)
这里no_op是下面给出的函数:
def no_op(self):
return "break"
但我没有得到预期的结果。我在下面发布了整个代码。
import Tkinter as tk
def onKeyPress(event):
first=event.char
second=ord(first)
if second==32:
second=chr(second)
text.insert('end', '%s' % (second ))
elif second==8:
length = len(text.get(1.0, 'end'))
contents = text.get(1.0, 'end')
newcon = contents[:-2]
#text.insert('end', '%s' % (length ))
text.delete(1.0,'end')
text.insert('end', '%s' % (newcon ))
elif(second>=65 and second<=90 or second>=97 and second<=122):
second=chr(second+3)
text.insert('end', '%s' % (second ))
def no_op(self):
return "break"
root = tk.Tk()
root.config(cursor='none')
#root.attributes('-zoomed',True)
text = tk.Text(root, background='white', foreground='black', font=('Comic Sans MS', 12))
text.pack(expand=True,)
text.bind("<Tab>", no_op)
text.bind("<Button-1>", no_op)
text.config(cursor="none")
root.bind('<KeyPress>', onKeyPress)
root.mainloop()
(注意:问题在于,当某个其他窗口小部件有焦点时按下标签页时,文本光标会出现在文本区域中。然后,如果我按下任何一个字母说“&#39; a&#39;以及&#39;&#39;&#39; d&#39;是否已插入文本字段。我想解决此问题。)
答案 0 :(得分:1)
您的问题不在于Tab键,您的问题是焦点管理。只有当文本小部件永远不会获得键盘焦点时,您才能使代码正常工作。至少有两种解决方案:
对于第一个,而不是尝试更改选项卡(以及shift-tab)的行为,您只需在文本小部件获取焦点时移动焦点。例如:
text.bind("<FocusIn>", lambda event: root.focus_set())
这将阻止文本小部件获得焦点,并且您的代码应该可以正常工作。
另一种解决方案是将<KeyPress>
绑定修改为文本小部件而不是根小部件,然后简单地拒绝所有按键处理。这意味着要text.bind('<KeyPress>', ...)
而不是root.bind...
。然后,您需要修改onKeyPress
以返回"break"
,以防止发生默认文本窗口小部件绑定。