在文本小组件中,当我使用 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")
答案 0 :(得分:3)
问题:文本小部件Ctrl + A + DEL-重置格式
初始化您的Text
对象。
将<Delete>
键绑定到功能。
我想你已经准备好了。
class Text(tk.Text):
def __init__(self, parent):
super().__init__(parent)
# Binding Shortcuts
self.master.bind("<Delete>", self.Delete_func)
在删除 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 自变量)