Ответ 1
Это очень легко сделать с 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()
устанавливает фокус на этот виджет - return
"break"
имеет решающее значение в том смысле, что он препятствует общению класса при запуске. Это привязка класса, которая вставляет символ табуляции, который вам не нужен.
Если вы хотите, чтобы это поведение для всех текстовых виджетов в приложении, вы можете использовать метод bind_class()
вместо bind()
, чтобы эта привязка затрагивала все текстовые виджеты.
Вы также можете привязать фокус отправки к очень конкретному виджету, но я рекомендую придерживаться порядка обхода по умолчанию, а затем убедитесь, что порядок обхода верен.