Приветствую уважаемое сообщество!
У меня следующая задача: Мне нужно создать панель с кнопками, названия которых взяты из файла (all_classes). При нажатии на каждую метку кнопки должны быть записаны в другом файле (selected_classes). Мне удалось создать кнопки в l oop и расположить их на панели, но событие записи к кнопке не привязано и не понимаю почему.
all_classes = open('data/yolo2/yolo2.names', 'r').read().split()
chosen_classes = open('chosen_classes', 'w')
deltaxSize, deltaySize, c = 0, 0, 0
for k, obj_class in enumerate(all_classes):
self.buttons.append(wx.Button(self.panel, label=f'{obj_class}', pos=(50 + deltaxSize, 20 + deltaySize),
size=(100, 20)))
self.Bind(wx.EVT_BUTTON, lambda event: chosen_classes.write(f'{obj_class}\n'), self.buttons[k])
deltaySize += 20
c += 1
if c == 30:
deltaxSize += 100
deltaySize, c = 0, 0
Пробовал вместо записи в лямбда просто печатает, чтобы проверить, что происходит, но дает странный результат: когда вы нажимаете любую кнопку, отображается только последняя метка:
deltaxSize, deltaySize, c = 0, 0, 0
self.buttons = []
for k, obj_class in enumerate(all_classes):
self.buttons.append(wx.Button(self.panel, label=f'{obj_class}', pos=(50 + deltaxSize, 20 + deltaySize),
size=(100, 20)))
self.Bind(wx.EVT_BUTTON, lambda event: print(f'{obj_class}\n'), self.buttons[k])
deltaySize += 20
c += 1
if c == 30:
deltaxSize += 100
deltaySize, c = 0, 0
То же самое происходит, если вы заменяете obj_class в f- линия с self.buttons [k]. GetLabelText () В то же время, если вы обращаетесь к каждой кнопке отдельно вне l oop, вы можете распечатать этикетку, но файл все равно не будет записывать. Я, по общему признанию, совершенно озадачен, если кто-нибудь может что-то подсказать, буду бесконечно благодарен. Спасибо.