Как разрешить непрерывное переключение фокуса в группе виджетов tkinter без застревания на последнем виджете? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть несколько виджетов tkinter Entry и Combobox, которые я могу использовать с помощью клавиши Tab, чтобы переключить фокус с одного виджета на другой.Однако, когда фокус прибывает к последнему виджету, фокус остается на последнем виджете и не возвращается к первому виджету при нажатии Tab.Как я могу получить это продолжение в переключении фокуса?

1 Ответ

0 голосов
/ 08 октября 2018

Я обнаружил причины своей проблемы:

  1. Я создал несколько виджетов FrameButton перед созданием виджетов Entry и виджета Combobox.По умолчанию для этих FrameButtons была определена опция takefocus=True.

  2. Эти Framebuttons, являясь виджетом типа ttk, были созданы с использованием пользовательского макета стиля, так что он только имел padding и label элементов.То есть у него не было элемента focus.

Следовательно, когда клавиша Tab была нажата после виджета Combobox, фокус действительно переместился на кнопки Frame.Но поскольку эти FrameButtons не содержали элемент фокусировки, фокус на этих кнопках не был виден.И поскольку таких кнопок было много, а задний фон поля Combobox был выбран после того, как фокус покинул его, эффекты нажатия клавиши Tab ощущались, когда фокус останавливался на Combobox.Чтобы визуализировать focus в FrameButtons, мне нужно было только убедиться, что у этих виджетов кнопок есть элемент макета focus, например:

    buttonlayout =[('Button.focus', {'sticky': 'nswe', 'children':
                    [('Button.padding', {'sticky':'nswe', 'children':
                      [('Button.label', {'sticky': 'nswe'})]})]})]
    s.layout('my.TButton', buttonlayout)

Сводка:

  1. Byпо умолчанию, Tab нажатие клавиши будет циклически перебирать все виджеты, определенные с опцией takefocus=True в порядке их создания.
  2. Если фокус останавливается на определенном виджете, убедитесь, что виджеты ttk в вашем tkinterGUI имеет элемент focus, определенный в его стилевом макете.Иначе эти виджеты не покажут, что у них есть фокус.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...