Как сохранить выделение в списке tkinter?

У меня есть 2 выделенных списка, установленных в режиме одиночного выбора. Когда я выбираю элемент из listboxA, он подсвечивается, но когда я выбираю элемент из listboxB, он подсвечивается, а элемент из listboxA остается активным, но не подсвечивается. Как я могу сохранить оба выделенных?

Ответы

Ответ 1

Короткий ответ: установите атрибут exportselection каждого списка на False

Tkinter имеет свои корни в системе окон X. X имеет концепцию под названием "выбор", которая похожа на системный буфер обмена (точнее, буфер обмена является "ПЕРВИЧНЫМ" выбором). По умолчанию некоторые из виджетов tkinter экспортируют свой выбор как выбор PRIMARY. Приложение может иметь только один выбор PRIMARY за раз, поэтому подсветка исчезает, когда вы щелкаете между двумя списками.

Tkinter дает вам контроль над этим поведением с параметром конфигурации exportselection для списка (а также виджеты для ввода текста и ввода). Установка этого параметра на False предотвращает экспорт выделения на выбор X, позволяя виджету сохранять свой выбор, когда другой виджет получает фокус.

Например:

the_listbox = tk.Listbox(..., exportselection=False)

Цитата из официальная документация tk:

exportselectionУказывает, должен ли выбор в виджете также быть X выбор. Значение может иметь любую форму, принятую Tcl_GetBoolean, например true, false, 0, 1, yes или no. Если выбор экспортируется, а затем выбор в виджете отменяет выбор текущий выбор X, выбор вне виджета отменяет выбор любого виджета выбор, и виджет будет реагировать на запросы на выборку когда у него есть выбор. Обычно по умолчанию для экспорта виджета выбор.