我遇到了一个我似乎不能理解的错误.我有一个tkinter文本小部件,它有一个在文本修改时触发的绑定.由于某些原因,当我使用组合键时会触发此事件,尽管它不应该这样做,因为它不会修改文本小部件的内容.

奇怪的部分来了:这个only(出现在.我已经做了一个简单的程序来演示这个问题.除了特殊的预先分配的组合键(如实际修改内容的组合键)外,没有其他组合的行为与此类似.

为什么会出现这种情况?我该如何预防呢?

import tkinter as tk
root = tk.Tk()
txt = tk.Text(root)
txt.pack()
root.bind("<Control-u>", lambda e: print("doesn't trigger"))
root.bind("<Control-o>", lambda e: print("somehow triggers"))
txt.bind("<<Modified>>", lambda e: print("text got modified!")) # (keep in mind that this will only get triggered once)

推荐答案

<Control-o>的文本小部件上的默认绑定添加了一个换行符.这来自Text小部件的官方TCL/Tk文档中的第bindings节:

Control-o在不移动插入光标的情况下,通过在插入光标前面插入换行符来打开新行.

从任何绑定返回字符串"Break"会阻止对事件的任何进一步处理.因此,您可以在文本小部件上为CONTROL-O添加一个返回字符串"Break"的绑定.由于您的绑定是在小部件的默认绑定之前处理的,因此这将有效地防止默认绑定修改小部件.

txt.bind("<Control-o>", lambda e: "break")

Python相关问答推荐

根据多列和一些条件创建新列

替换字符串中的点/逗号,以便可以将其转换为浮动

使用from_pandas将GeDataFrame转换为polars失败,ArrowType错误:未传递numpy. dype对象

如何处理嵌套的SON?

如何让 turtle 通过点击和拖动来绘制?

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

DataFrame groupby函数从列返回数组而不是值

如何比较numPy数组中的两个图像以获取它们不同的像素

Pandas - groupby字符串字段并按时间范围 Select

pandas滚动和窗口中有效观察的最大数量

C#使用程序从Python中执行Exec文件

Python中绕y轴曲线的旋转

如何在给定的条件下使numpy数组的计算速度最快?

将tdqm与cx.Oracle查询集成

在pandas中使用group_by,但有条件

为一个组的每个子组绘制,

多处理队列在与Forking http.server一起使用时随机跳过项目

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

try 检索blob名称列表时出现错误填充错误""

ruamel.yaml dump:如何阻止map标量值被移动到一个新的缩进行?