wxpython динамически ссылается на виджеты (wxformbuilder)

Я часто оказываюсь в ситуации, когда я хочу создать ряд wx.StaticTextили какой-то другой виджет в wxFormbuilder и иметь возможность ссылаться на них динамически. Скажем, у меня есть несколько названных statictexts a0 через a10

Как мне найти их в коде?

Одним из способов является создание списка со всеми переменными, но он уродлив и неэффективен? Может быть, нет, но по крайней мере код запутан с длинными списками повсюду.

 def updateLabels(self, data):
     guiLabels = [self.a0, self.a1, self.a2 ..... ]
     for i in range(len(guiLabels)):
         guiLabels[i].SetLabel(data[i)

Как вы собираетесь исправить это?

Другой альтернативой является создание списка guiLabels при запуске приложения. Однако у меня были некоторые проблемы с их поиском. Вы должны вызвать GetChildren() в верхнем окне и установить другой wx.ID для каждого StaticText а затем просмотрите каждый элемент и найдите этот идентификатор, который вы сделали.. И форматирование, когда я это делаю, действительно не имеет смысла.. Текст получает разные цвета фона и не учитывает его выравнивания и другие интересные вещи.

Есть мысли о том, как я могу это сделать?

1 ответ

Может быть, что-то подобное может работать для вас:

for x in xrange(10):
    name = "a%s" % x # dynamically generating reference names
    obj = getattr(self, name) # getting the object reference from the parent object
    obj.SetLabel("xyz")
Другие вопросы по тегам