Изменение фокуса с одного текстового виджета на другой

Я новичок в Python, и я пытаюсь создать простой графический интерфейс с помощью Tkinter.

Так часто во многих пользовательских интерфейсах нажатие кнопки вкладки изменяет фокус с одного текстового виджета на другой. Всякий раз, когда я нахожусь в текстовом виджете, вкладка только отступает от текстового курсора.

Кто-нибудь знает, если это настраивается? Если нет, может ли PyQt или любая другая инфраструктура пользовательского интерфейса Python использовать эту функциональность?

  • Запуск формы Tkinter в отдельном потоке
  • Использование Lambda и кортежей для отправки нескольким функциям: Python, Tkinter
  • Обновление виджета метки python / tkinter?
  • Как установить оправдание в текстовом поле Tkinter
  • Python tkinter сохранить холст как постскриптум и добавить в pdf
  • Tkinter: настройка метода для динамически генерируемых меток
  • Получение меток tkinter для обновления при изменении переменных
  • Кнопки имеют собственную систему координат в соответствии с методом «grid_location»?
  • 4 Solutions collect form web for “Изменение фокуса с одного текстового виджета на другой”

    Это очень легко сделать с 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() чтобы bind() это привязку ко всем текстовым виджетам.

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

    Не уверен в TKinter, но с PyQt можно подключить функцию к вкладке с измененным сигналом, испускаемым полем табуляции (сигнал также несет значение int). Но насколько я знаю, Qt очень хорошо делает правильные вещи, не указывая их.

    В PyQt4 очень просто использовать эту одну строчку ниже, и вы сможете изменить фокус, нажав кнопку табуляции:

    self.textEdit.setTabChangesFocus (True)

    Из-за кросс-платформенного характера обход фокуса несколько настраивается, что обычно позволяет диспетчеру X-Window обрабатывать его (с фокусом следует за мышью или щелчком мыши). Согласно руководству, должно быть возможно bind событие с событием нажатия клавиши, сканировать нажатиями табуляции и запускать событие focusNext в этих случаях.

    Python - лучший язык программирования в мире.