2015-12-16 2 views
-1

Я часто оказываюсь в ситуации, когда хочу создать число wx.StaticText или какой-либо другой виджет в wxFormbuilder и иметь возможность обращаться к ним динамически. Скажем, у меня есть ряд статических текстов с именем a0 по a10wxpython динамически ссылается на виджеты (wxformbuilder)

Как бы я нашел их в коде?

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

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") 
+0

Ответы на SO должно быть более полным, чем это. По крайней мере, вам нужно объяснить, что было сделано для решения проблемы и почему. Ответ, содержащий * «возможно» *, является сильным признаком того, что вы не знаете ответа. В этом случае не отправляйте его как единое целое. – IInspectable

+0

Мой ответ отвечает на вопрос. Код тривиальный и самоочевидный. Возможно, это слово было разговорным и не показало, что не знает ответа. – user2682863

+0

Этот ответ был помечен как некачественный. При рассмотрении я пришел к такому же выводу и указал на конкретные моменты, которые можно было бы улучшить. – IInspectable