#python #sorting #events #wxpython
#python #сортировка #Мероприятия #wxpython
Вопрос:
[Python v3.7.9 x64; wxPython v4.1.0; MS Windows 10 x64]
Я использую wx.dataview.Виджет DataViewListCtrl, и я включил сортировку по одному из столбцов в элементе управления списком с помощью:
first_col = self.dv_list_control.Columns[0] # gets first col of the DataViewListCtrl
first_col.SetSortable(sortable=True) # allows sorting of first col
Это отлично работает, когда выбран заголовок первого столбца, все данные в элементе управления списком сортируются так, как вы ожидаете.
Мне нужно определить, когда данные отсортированы, потому что после сортировки данных мне нужно немедленно извлечь все данные, хранящиеся в элементе управления списком, и обработать их.
В настоящее время у меня есть простая функция, которая привязана к dataview.EVT_DATAVIEW_COLUMN_SORTED
событию. Хотя элемент управления списком не обновляет и не сортирует данные до тех пор, пока функция не будет возвращена — очевидно, что событие еще не завершено.
Я пробовал использовать Update()
, UpdateWindowUI()
, Refresh()
, CallAfter()
, Yield()
, SafeYield()
, и многое другое. Я не эксперт в wxpython, и я исчерпал все, что я могу придумать. Я не уверен, возможно ли «определить, когда событие полностью завершило обработку и что-то сделать», или есть какие-то другие способы выполнения функции сразу после завершения события?? Это кажется чем-то обычным в определенных ситуациях, подобных этой.
Некоторые примеры кода, ссылки или что-нибудь было бы полезно — спасибо.
=====Редактировать =====
Так что я еще немного повозился, и мой предыдущий вопрос может быть не единственной проблемой. После сортировки, щелкнув заголовок столбца, а затем извлекая данные в элементе управления list, полученные данные больше не сортируются, а вместо этого находятся в исходном порядке. Я полагаю, что сортировка должна выполняться по некоторому уникальному идентификатору, связанному с каждой строкой данных в элементе управления списком.
Есть ли способ получить данные точно в том порядке, в котором они отображаются после сортировки?
Комментарии:
1. Я только что ответил на свой вопрос об редактировании. Выполнение
first_col.SetReorderable(reorderable=True)
переупорядочивает данные в элементе управления списком после его сортировки.2. Похоже
SetReoderable()
, это не делает того, что я сказал ранее… подождет, пока появится кто-то более опытный.