Это очень легко сделать с помощью Tkinter.
Чтобы сделать эту работу, должно произойти несколько вещей. Во-первых, вам нужно убедиться, что стандартное поведение не не происходит. То есть вы не хотите, чтобы вкладка одновременно вставляла вкладку и перемещала фокус на следующий виджет. По умолчанию события обрабатываются конкретным виджетом до того, как происходит стандартное поведение (обычно в привязках классов). Tk имеет простой встроенный механизм, чтобы предотвратить дальнейшую обработку событий.
Во-вторых, вам нужно убедиться, что вы отправили фокус на соответствующий виджет. Имеется встроенная поддержка определения следующего виджета.
Например:
def focus_next_window(event):
event.widget.tk_focusNext().focus()
return("break")
text_widget=Text(...)
text_widget.bind("<Tab>", focus_next_window)
Важные моменты об этом коде:
- Метод
tk_focusNext()
возвращает следующий виджет в иерархии обхода клавиатуры.
- метод
focus()
устанавливает фокус на этот виджет
- возврат
"break"
является критическим в том смысле, что он предотвращает срабатывание привязки класса. Именно эта привязка класса вставляет символ табуляции, который вам не нужен.
Если вы хотите использовать это поведение для всех текстовых виджетов в приложении, вы можете использовать метод bind_class()
вместо bind()
, чтобы эта привязка влияла на все текстовые виджеты.
У вас также может быть привязка для отправки фокуса на очень специфический виджет, но я рекомендую придерживаться порядка обхода по умолчанию, а затем убедиться, что порядок обхода правильный.