【问题标题】:How to freeze use of key tab in tkinter python如何在 tkinter python 中冻结键选项卡的使用
【发布时间】:2015-07-24 18:01:27
【问题描述】:

我正在尝试制作一个简单的应用程序,可以在打字时打乱键盘字母。我正在使用 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()

(注意:问题是当其他一些小部件具有焦点时按下选项卡时,文本光标进入文本区域。然后,如果我按任何字母说,'a' both 'a' 和 'd' 被插入到文本字段中。我想解决这个问题。)

【问题讨论】:

  • 我没有得到预期的结果:请更具体。在我的电脑上,你的代码可以工作(一旦我修复了缩进)。
  • 您的代码在 OSX 上对我来说可以正常工作——按 Tab 没有任何作用。
  • 问题是当按下tab时,文本光标进入文本区域。然后如果我按下任何字母说,'a''a'和'd'都插入到文本字段中.我想解决这个问题。

标签: python tkinter


【解决方案1】:

您的问题不在于 tab 键,您的问题是焦点管理。只有当文本小部件永远不会获得键盘焦点时,您的代码才能工作。至少有两种解决方案:

  • 继续阻止用户关注文本小部件
  • 允许专注于文本小部件,并相应地调整您的绑定

首先,无需尝试更改选项卡(以及 shift-tab)的行为,您只需在文本小部件获取焦点时移动焦点即可。例如:

text.bind("<FocusIn>", lambda event: root.focus_set())

这将阻止文本小部件获得焦点,并且您的代码应该可以工作。

另一种解决方案是将&lt;KeyPress&gt; 绑定修改为文本小部件而不是根小部件,然后简单地拒绝所有按键处理。这意味着做text.bind('&lt;KeyPress&gt;', ...) 而不是root.bind...。然后您需要修改onKeyPress 以返回"break" 以防止发生默认文本小部件绑定。

【讨论】:

    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多