Tkinter Text Widget Ctrl + A + DEL删除标签

时间:2019-05-01 11:34:30

标签: python python-3.x tkinter

在文本小组件中,当我使用 Ctrl + A + DEL 删除所有文本时,标记将被删除。

如何解决?

这是标记代码:

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")

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

当您手动编辑文本窗口小部件时,所有文本都通过基础的insert方法。 insert消息的文档包括以下内容:

  

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

注意:当您在文本小部件中按一个键时,它将调用没有tagList的insert方法。例如,按键盘上的“ a”键将产生insert("insert", "a")(即:没有 tagList 自变量)