Tkinter Text Widget Ctrl + A + DEL удаляет тег - PullRequest
1 голос
/ 01 мая 2019

В Text Widget, когда я удаляю весь текст с помощью 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 ]

3 голосов
/ 01 мая 2019

Вопрос : виджет текста 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. При удалении все , связать любой ввод с клавиатуры для функции 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 голос
/ 01 мая 2019

Ваше наблюдение неверно. Если вы настроите тег, а затем удалите весь текст, тег все еще существует. Вы можете использовать тег для дополнительного текста без необходимости повторного создания тега.

Если вы вставите текст вручную, он не получит тег автоматически, поскольку у tkinter нет возможности узнать, какие теги использовать. Tkinter будет добавлять только те теги, которые находятся на символе до и после точки вставки. Поскольку до или после точки вставки нет символов, новый текст не получит никаких тегов.

Когда вы редактируете текстовый виджет вручную, весь текст проходит через базовый метод insert. Документация для сообщения insert включает следующее:

Если есть один аргумент chars и нет tagList, то новый текст получит любые теги, которые присутствуют как на символе до, так и на символе после точки вставки; если тег присутствует только на одном из этих символов, он не будет применен к новому тексту.

Примечание: когда вы нажимаете клавишу в текстовом виджете, он вызывает метод insert без tagList. Например, нажатие клавиши «a» на клавиатуре приводит к insert("insert", "a") (то есть: нет аргумента tagList )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...