Я обнаружил причины своей проблемы:
Я создал несколько виджетов FrameButton перед созданием виджетов Entry и виджета Combobox.По умолчанию для этих FrameButtons была определена опция takefocus=True
.
Эти 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)
Сводка:
- Byпо умолчанию,
Tab
нажатие клавиши будет циклически перебирать все виджеты, определенные с опцией takefocus=True
в порядке их создания. - Если фокус останавливается на определенном виджете, убедитесь, что виджеты ttk в вашем tkinterGUI имеет элемент focus, определенный в его стилевом макете.Иначе эти виджеты не покажут, что у них есть фокус.