当前位置: 首页 > 知识库问答 >
问题:

有没有一种方法可以将按键绑定到root,而不干扰tkinter中的默认绑定

闾丘文昌
2023-03-14

我正在尝试向tkinter中的文本小部件添加语法高亮显示我正在使用另一个堆栈溢出问题Pygments syntax highlighter中的代码python tkinter文本小部件中的Pygments syntax highlighter我将syntax hyghlighting函数绑定到根,但问题是所有其他默认绑定(如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()

共有1个答案

巫朝明
2023-03-14

问题不是因为要替换默认绑定。这不是tkinter中绑定的工作方式。没有直接绑定到根小部件或任何其他特定小部件的绑定。默认绑定实现为“所有”或小部件类上的绑定,而不是单个小部件上的绑定。

如果我将其绑定到文本小部件,但最后输入的字母不突出显示,它们工作正常。

这是因为小部件上的绑定发生在默认绑定之前。因此,如果您键入“a”,您的代码将在插入字母“a”的代码之前被调用

这个网站上有一个关于事件处理顺序的问题。虽然答案与条目小部件有关,但完全相同的概念适用于所有小部件。请参阅关于tkinter中bindtags的基本查询问题的答案

 类似资料:
  • 问题内容: 编程新手,尤其是python和tKinter。如何创建将键“s”绑定到按钮或功能的方法?任何帮助都是极好的。 问题答案: 您需要进行两项更改: 加 到。(绑定到Frame似乎无效。) 当按下时,会被调用。由于Tkinter将发送对象,因此我们还必须将呼叫签名更改为 因此,当按下按钮时,将被设置为默认值,但是当按下按键时, 将被分配给对象。

  • 我正在使用ExtJS4,并试图在面板中创建一个按钮 这里我使用'btn-primary'来设置按钮的样式。但在生成的HTML中,代码如下所示 您可以看到类'btn-primary'被添加到它的容器中,一个div中,而不是按钮本身,这不是我想要的,这样,类就不会影响按钮。 那么有没有办法生成一个类设置在按钮本身上的按钮呢?或者有没有一种方法可以生成一个没有容器的纯按钮?提前道谢。

  • 问题内容: 我们正在使用 PropertyPlaceholderConfigurer 在我们的Spring配置中使用java属性(此处有详细信息) 例如: 我们想添加一个附加属性,但是要有一个分布式系统,现有实例都可以使用默认值。通过在Spring config中为未定义覆盖属性值的默认值指示默认值,是否有办法避免更新所有属性文件? 问题答案: 您是否正在寻找此处记录的PropertyOverri

  • 问题内容: 以下代码在MS Windows中正常工作(按时脚本将退出): 我试图在“无窗口管理器”的Debian环境中运行它(引导至控制台,运行,它通过(那里唯一的命令)启动脚本)。 该脚本按预期方式启动,但按任何操作均不执行任何操作(我原本希望关闭并返回至文本控制台)。后来我尝试添加,以防万一,但这并没有帮助。 MS Windows和Debian环境之间这种不同行为的原因可能是什么? 问题答案:

  • 我正在尝试用React制作Laravel应用程序。我想从注册和授权表单开始。所以我用拉威尔的命令做了这些 作曲家需要laravel/ui PHP工匠ui反应 PHP工匠ui反应--auth 但不幸的是,smth出错了,当我使用登录时,主页的路由不起作用。问题出在哪里? 应用程序\Http\控制器\Auth\登录 应用程序\控制器\家庭控制器 应用程序/提供商/路由服务提供商 视图\主页 路由\we

  • 问题内容: 让我们说我有这样的查询: 通过在各处手动更改字符串,我使用不同的表多次运行此查询。我尝试声明以下内容: 但这似乎不起作用,因为它引发了一个错误,提示我必须先声明为表变量,然后才能使用它。我如何对表名进行模板化,如果可以的话,Intellisense仍然可以使用吗? 问题答案: 您可以将其包装在EXEC语句中,如下所示: 但是不,在这种情况下,智能感知将无法正常工作。 如果您事先知道输出