Mam 2 oddzielne pola listy ustawione w trybie pojedynczego wyboru. Gdy wybiorę element z listboxA
, zostanie on podświetlony, ale po wybraniu elementu z listboxB
zostanie podświetlony, a element z listboxA
pozostanie aktywny, ale nie zostanie podświetlony. Jak mogę oba wyróżnić?Jak zachować zaznaczenia zaznaczone w skrzynce pocztowej tkinter?
Odpowiedz
Krótka odpowiedź: ustawić atrybut każdego listbox exportselection
do False
Tkinter ma swoje korzenie w systemie X okienkowym. X ma koncepcję zwaną "selekcja", która jest podobna do schowka systemowego (dokładniej, schowek jest wyborem "PODSTAWOWYM"). Domyślnie kilka widgetów tkinter eksportuje swój wybór do wyboru PRIMARY. Aplikacja może mieć tylko jeden wybór PIERWSZY na raz, dlatego podświetlenie znika po kliknięciu między dwoma listami.
Tkinter zapewnia kontrolę nad tym zachowaniem za pomocą opcji konfiguracyjnej exportselection
dla listbox (oraz widżetów tekstowych i wpisów). Ustawienie go na False
zapobiega eksportowaniu zaznaczenia do zaznaczenia X, dzięki czemu widget zachowuje swój wybór, gdy inny widget zostanie ustawiony.
Na przykład
the_listbox = tk.Listbox(..., exportselection=False)
Cytowanie z official tk documentation:
exportselection określić czy selekcji na widget należy również wybór X. Wartość może mieć dowolną z form zaakceptowanych przez Tcl_GetBoolean, takich jak true, false, 0, 1, yes lub no. Po wyeksportowaniu zaznaczenia wybór w widżecie powoduje odznaczenie bieżącego wyboru X, zaznaczając poza widżetem dowolny wybór widżetu, a widget będzie odpowiadał na żądania pobierania wyboru , gdy ma zaznaczenie. Wartością domyślną jest zazwyczaj wyeksportowanie widżetów w postaci .