1

在 Text Widget 中,当我使用 Ctrl++删除所有文本ADEL,标签被删除。

如何解决?

这是标签代码:

def _ingrandisci(self,event=None):
    BloccoNote._c+=1
    self._testo.tag_config("i", font=("Consolas", BloccoNote._c))
    self._testo.tag_add("i", "1.0", "end")
    self._testo.tag_raise("i")
4

2 回答 2

3

问题:文本小部件 Ctrl+A + DEL - 重置格式

  1. 初始化你的Text对象。
    将键绑定<Delete>到函数。我假设你已经完成了这一切。

    class Text(tk.Text):
        def __init__(self, parent):
            super().__init__(parent)
    
            # Binding Shortcuts
            self.master.bind("<Delete>", self.Delete_func)
    
  2. 在删除all时,将任何键盘输入绑定到该set_default_tag函数。
    这个函数最初是不受约束的event.char

        def Delete_func(self, event):
            def set_default_tag(event):
                if event.char:
                    self.master.unbind('<Key>', self.Key_funcid)
    
                self.text.tag_add("i", "1.0", "end")
    
            self.text.delete('1.0', 'end')
            self.Key_funcid = self.master.bind('<Key>', set_default_tag)
    

用 Python 测试:3.5

于 2019-05-01T20:33:08.920 回答
1

你的观察不正确。如果您配置一个标签,然后删除所有文本,该标签仍然存在。您可以在其他文本上使用标签,而无需重新创建标签。

如果您手动插入文本,它不会自动获取标签,因为 tkinter 无法知道要使用哪些标签。Tkinter 只会添加插入点前后字符上的标签。由于插入点之前或之后没有字符,因此新文本不会获得任何标签。

当您手动编辑文本小部件时,所有文本都通过底层insert方法。该insert消息的文档包括:

如果只有一个 chars 参数并且没有 tagList,那么新文本将接收插入点之前的字符和之后的字符上都存在的任何标记;如果标签仅出现在这些字符之一上,那么它将不会应用于新文本。

注意:当您在文本小部件中按下一个键时,它会调用insert不带 tagList 的方法。例如,按下键盘上的“a”键会导致insert("insert", "a")(即:没有tagList参数)

于 2019-05-01T15:00:08.123 回答