отключить сочетание клавиш tkinter - PullRequest
1 голос
/ 13 июля 2011

У меня есть обработчик событий, который я связал с Ctrl + H , который Tkinter также распознает как backspace .Хотя я читал, что с return 'break' в конце обработчика я должен остановить распространение ярлыка, он не работает!Это проблема Ctrl + H или что?

Вот код:

def setheading(event=None):
    x=tkSimpleDialog.askstring('Set as header line', 'Enter an integer 1-5: ')
    config.text.tag_add('h'+x, SEL_FIRST,SEL_LAST)
    return 'break'

Ответы [ 2 ]

0 голосов
/ 21 ноября 2017

Вы, вероятно, привязали CTRL + H к корню.

Причина, по которой это происходит, заключается в том, что событие отправляется в следующем порядке:

  1. Обратный вызов виджета
  2. Обратный вызов класса виджетов *
  3. Корневой обратный вызов

    * (отсюда и поведение по умолчанию)

Решение состоит в том, чтобы связать событие дважды. Один раз для самого текстового виджета с return "break" и один раз для корня, чтобы обратный вызов вызывался и для других виджетов. return "break" на виджете не позволит ему перейти к фазе 2 (следующей), откуда происходит нежелательное поведение по умолчанию.

Вы можете использовать такую ​​утилиту, как эта

def k(handler):
    """decorates an event handler in such a way
that the default shortcut command is not triggered
same as event.preventDefault() in HTML5 but
as a decorator"""
    def prevent_default(*event):
        handler(event)
        return 'break'
    return prevent_default

связанный ответ для более подробной информации о каскадном обратном вызове отключение сочетания клавиш tkinter (2)

0 голосов
/ 14 июля 2011

Я предполагаю, что оператор config.text.tag_add(...) выдает ошибку, которая не перехватывается.Если это так, оператор return никогда не будет выполнен.Если возврат никогда не выполняется, ничто не мешает связыванию классов сработать.

Ошибка будет выдана, если в окне не выделен текст.

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