有没有办法在不干扰 tkinter 中的默认绑定的情况下将按键绑定到 root
is there a way to bind key press to root without disturbing default binds in tkinter
我正在尝试为 tkinter 中的文本小部件添加语法高亮显示
我正在使用另一个堆栈溢出问题的代码
我将语法高亮功能绑定到根目录
但问题是所有其他默认绑定如 CTRL A 停止工作。
如果我将它绑定到文本小部件但最后一个
输入的字母没有突出显示。
这是代码(我是编程新手所以可能会有很多愚蠢的错误)
from tkinter import *
from pygments import lex
from pygments.lexers import PythonLexer
def test(e):
txt.mark_set("range_start", "1.0")
data = txt.get("1.0", "end")
for tag in txt.tag_names():
txt.tag_remove(tag,"1.0","end")
for token, content in lex(data, PythonLexer()):
txt.mark_set("range_end", "range_start + %dc" % len(content))
txt.tag_add(str(token), "range_start", "range_end")
txt.mark_set("range_start", "range_end")
root=Tk()
txt=Text(root)
txt.pack(expand='yes')
txt.tag_configure("Token.Comment.Single", foreground='red')
root.bind('<Any-KeyPress>',test)
root.mainloop()
问题不是因为您要替换默认绑定。这根本不是绑定在 tkinter 中的工作方式。没有直接绑定到根小部件或任何其他特定小部件的绑定。默认绑定是作为对“所有”或小部件 类 的绑定实现的,而不是单个小部件。
They work fine if i bind it to the text widget but the last entered letter doesnt get highlighted.
这是因为小部件上的绑定发生在默认绑定之前。因此,如果您键入“a”,您的代码将在插入字母“a”的代码之前被调用。
此站点上有一个与事件处理顺序相关的问题。虽然答案与 Entry 小部件有关,但完全相同的概念适用于所有小部件。参见 this answer to the question Basic query regarding bindtags in tkinter
我正在尝试为 tkinter 中的文本小部件添加语法高亮显示
我正在使用另一个堆栈溢出问题的代码
from tkinter import *
from pygments import lex
from pygments.lexers import PythonLexer
def test(e):
txt.mark_set("range_start", "1.0")
data = txt.get("1.0", "end")
for tag in txt.tag_names():
txt.tag_remove(tag,"1.0","end")
for token, content in lex(data, PythonLexer()):
txt.mark_set("range_end", "range_start + %dc" % len(content))
txt.tag_add(str(token), "range_start", "range_end")
txt.mark_set("range_start", "range_end")
root=Tk()
txt=Text(root)
txt.pack(expand='yes')
txt.tag_configure("Token.Comment.Single", foreground='red')
root.bind('<Any-KeyPress>',test)
root.mainloop()
问题不是因为您要替换默认绑定。这根本不是绑定在 tkinter 中的工作方式。没有直接绑定到根小部件或任何其他特定小部件的绑定。默认绑定是作为对“所有”或小部件 类 的绑定实现的,而不是单个小部件。
They work fine if i bind it to the text widget but the last entered letter doesnt get highlighted.
这是因为小部件上的绑定发生在默认绑定之前。因此,如果您键入“a”,您的代码将在插入字母“a”的代码之前被调用。
此站点上有一个与事件处理顺序相关的问题。虽然答案与 Entry 小部件有关,但完全相同的概念适用于所有小部件。参见 this answer to the question Basic query regarding bindtags in tkinter