Я предоставляю код ниже с оговорками.
Ваш пример кода и пояснения противоречат друг другу.
Вы имеете в виду пропуск события на более высокую панель, но в вашем примере такого кода нет. Таким образом, мы остаемся в положении, когда у нас есть заявленное требование, но мы не знаем, как, почему или когда оно должно быть выполнено.
Существует четкое различие между Сосредоточенным и Выбранным. Я полагаю, что в этих обстоятельствах вам лучше использовать Selected.
Для записи, несмотря на ваш комментарий, с listctrl без элементов попробуйте Linux либо self.list_ctrl.Select(0)
или self.list_ctrl.Focus(0)
, оба взломают sh ваш код SetItemState(): invalid list ctrl item index in SetItem
.
import wx
class MainFrame(wx.Frame):
def __init__(self):
super().__init__(None)
self.some_sets = {
"fruits": ["apples", "bananas", "pears"],
"instruments": ["flutes", "drums", "guitars"],
"empty": [],
}
self.list_ctrl = wx.ListCtrl(self, style=wx.LC_REPORT)
self.list_ctrl.AppendColumn("Column")
self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_focus, self.list_ctrl)
#self.update("empty")
self.update("fruits")
self.Show()
def update(self, set_name):
"""Refill the ListCtrl."""
# Empty the ListCtrl
self.list_ctrl.DeleteAllItems()
# Refill it
for element in self.some_sets[set_name]:
self.list_ctrl.Append([element])
if self.list_ctrl.GetItemCount():
#self.list_ctrl.Focus(0)
self.list_ctrl.Select(0)
else:
self.on_focus(None)
def on_focus(self, event):
"""Do something."""
if event:
focused = event.GetItem().GetText()
print(f"{focused} is Selected.")
else:
print("No focus.")
app = wx.App()
main_frame = MainFrame()
app.MainLoop()