#python #listbox #highlight #pysimplegui
#питон #поле со списком #выделить #писимплеги
Вопрос:
У меня очень простой интерфейс, в котором у меня есть список с именами моих сотрудников и вводимый текст, в который я могу ввести имя для более быстрого поиска.
У меня есть Я не добавляю никакого текста на ввод, я могу выбрать имя сотрудника с выделением, подобным этому:
Но если я буду искать имя (а затем я обновлю этот элемент для нового списка только теми именами, которые содержат текст, который я пишу) Как вы можете видеть, я не могу уловить изюминку:
Мой код:
import PySimpleGUI as sg
employees_list = ['John','Pete','Anne','Jack','Golsing']
layout = [[sg.Input(visible=True,size=(15, 1), enable_events=True,key='-input-')]
,[sg.Listbox(values=employees_list,size=(15, 3),enable_events=True, select_mode=sg.LISTBOX_SELECT_MODE_MULTIPLE, key='-employee-')]]
Window = sg.Window('DEV', layout)
while True:
Event, Values = Window.read()
if Event == sg.WIN_CLOSED:
break
if Values['-input-'] != '':
search = Values['-input-'].upper()
new_employees = [x.upper() for x in employees_list if search in x]
Window.Element('-employee-').Update(values=new_employees, select_mode=sg.LISTBOX_SELECT_MODE_MULTIPLE)
Кто-нибудь проходил через это? Как я могу это решить?
Спасибо!
Ответ №1:
Здесь вы должны обработать другое событие,
if Values['-input-'] != '':
Здесь вы сделаете это, если сгенерировано какое-либо событие, so Listbox
будет обновляться при нажатии Listbox
, поэтому для выбора будет установлено значение none, поэтому ни один элемент не выбран или не выделен.
Итак, код должен быть
if Event == '-input-' and Values['-input-'] != '':
И здесь вы не восстанавливаете listbox до полного списка при пустом вводе. Так что, возможно, вам нужно обработать другой случай для
if Event == '-input-' and Values['-input-'] == '':
# update Listbox with values=employees_list