Python — SimpleGUI — Listbox — После поиска я теряю выделение

#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