Мой графический интерфейс состоит из wx.ListCtrl
слева со списком объектов для редактирования и набора wx.TextCtrl
с справа для редактирования выбранного объекта.
Моя стратегия дляреализовано это:
- В текстовом поле
wx.EVT_KILL_FOCUS
обновите соответствующий атрибут выбранного в данный момент объекта - В списке
wx.EVT_LIST_ITEM_DESELECTED
либо скрыть текстовые поля, либо очистить ихи отключить их (необходимо, когда пользователь щелкает пустое место в элементе управления списком) - В списке
wx.EVT_LIST_ITEM_SELECTED
заполните текстовые элементы управления значениями атрибутов выбранного объекта
С этой настройкой есть 3 варианта использования, и 2 из них работают:
Когда пользователь щелкает / вкладывает между текстовыми полями, происходит правильный wx.EVT_KILL_FOCUS
с, иатрибуты обновляются.
Когда пользователь щелкает текстовое поле в пустом месте в списке, это тоже нормально: сначала wx.EVT_KILL_FOCUS
вызывает обновление атрибута, а затем wx.EVT_LIST_ITEM_DESELECTED
скрывает текстовые поля.
Проблема заключается в том, что пользователь щелкает непосредственно из текстового поля другому объекту в элементе управления списком.Порядок событий в этом случае wx.EVT_LIST_ITEM_DESELECTED
, wx.EVT_LIST_ITEM_SELECTED
, а затем, наконец, wx.EVT_KILL_FOCUS
.Возможно, вы видите проблему: к тому времени, когда вызывается метод, который обновляет атрибуты, новый объект уже выбран, и текстовые поля заполнены новыми значениями.
Итак, я знаюименно в чем проблема, но я не могу придумать хороший, чистый способ ее исправить.В идеале я хотел бы иметь возможность изменить порядок событий wx (поместив wx.EVT_KILL_FOCUS
впереди), но я сомневаюсь, что это возможно.Есть ли какое-то другое очевидное решение, которое мне не хватает?