Виджет повторителей в gtk3 с использованием python иglade

Я пытаюсь разрабатывать приложения для gtk3 с использованием python. Я разработал пользовательский интерфейс с помощью Glade. Я хочу знать, есть ли способ использовать массивы виджетов, в котором каждый виджет подобного типа будет иметь одно и то же имя, но с другим индексом. Это помогло бы в значительной степени сократить код.

В моем приложении у меня есть 10 виджетов меток, которые отображают разные данные на основе массива данных. Теперь мне приходится вызывать метод gbuilder.get_object() каждый раз, когда мне нужно получить нужный объект. Если бы я мог использовать массивы виджетов, это действительно помогло бы уменьшить избыточность кода.


person Gaurav Sood    schedule 10.01.2012    source источник


Ответы (1)


Если вы назвали виджеты в поляне так:

  • <widget_name>_1
  • <widget_name>_2
  • ...
  • <widget_name>_n

Было бы легко создать такой список виджетов в вашем приложении следующим образом:

widget_list = [builder.get_object('<widget_name>_{0}'.format(i))
               for i in range(1, n+1)]

Чтобы получить, например, пункт 7, достаточно проиндексировать список (обратите внимание, что индексы начинаются с 0):

widget_list[6]

Цель {0} — сгенерировать имена виджетов:

>> ['<widget_name>_{0}'.format(i)) for i in range(1, 4)
['<widget_name>_1', '<widget_name>_2', '<widget_name>_3']

Для получения дополнительной информации об использовании format см. мини-язык спецификации формата

person jcollado    schedule 10.01.2012
comment
и как мне использовать данные из ‹widget_name›_7 из списка. также, какова цель {0}? - person Gaurav Sood; 10.01.2012
comment
@GauravSood Я отредактировал свой ответ, добавив информацию, которую вы запросили в комментарии. - person jcollado; 10.01.2012
comment
я получил метод. только один вопрос. у меня есть 10 кнопок, которые соответствуют одному и тому же методу при нажатии. я использовал список. используется словарь для различных излучаемых сигналов. как добавить список кнопок в диктофон и использовать один и тот же сигнал для всех кнопок? Кроме того, в методе, как я собираюсь проверить, какая кнопка была нажата? dict имеет следующий формат: ‹code›dic={'on_‹имя виджета›_clicked':method, 'on_‹имя виджета›_clicked':method1} builder.connect_signals(dic) ‹code› - person Gaurav Sood; 10.01.2012
comment
Пожалуйста, для блага других людей, у которых может возникнуть такая же проблема в будущем, не используйте комментарии, чтобы задавать новые вопросы. - person jcollado; 10.01.2012