2015-09-26 4 views
-1

Я пытаюсь создать виджеты с циклом. Это то, что я пробовал:Не удается подключить виджет к моей сетке

def set_runways(self, airfield): 
     i = 0 
     for rwy in airfield['Runways']: 
      frame = Gtk.Frame() 
      frame.set_label('-'.join([rwy['Runway_1'], rwy['Runway_2']])) 
      frame.set_shadow_type(1) 

      self.runways_layout.attach(frame, (i/2), (i % 2), 1, 1) 

      rwy_layout = Gtk.Grid() 
      frame.add(rwy_layout) 

      # Just for testing : 
      label = Gtk.Label('Hello, World') 
      rwy_layout.attach(label, 0, 0, 1, 1) 

импортировать мой runways_layout в моем __init__ с self.runways_layout = builder.get_object('runwaysGrid') который является Gtk.Grid и Звоню функцию после того, как с self.set_runways(airfield). Но даже с этим, мое окно не показывает Hello World, у меня пустое окно ... Почему?

Я указываю, что мой rwy не пуст.

Благодарим за помощь.

EDIT:
Хорошо, я попробовал эту простую вещь:

self.runways_layout = builder.get_object('runwaysGrid') 

label = Gtk.Label('Coucou') 
self.runways_layout.attach(label, 0, 0, 1, 1) 

И это не работает слишком ... O_o

ответ

-1

Хорошо, я нашел решение, я должен сделать:

self.runways_layout = builder.get_object('runwaysGrid') 

label = Gtk.Label('Coucou') 
self.runways_layout.attach(label, 0, 0, 1, 1) 

label.show() # Add this and it works... 

Но почему?

+0

Что значит «почему»? прочитайте методы show (9 и show_all() из ссылки, и вы узнаете об этом. – gianmt

+0

В моем другом окне мне не нужно писать 'label.show()'. Я не понимаю, почему. – Wizix

+1

show_all () вызывает show() рекурсивно для всех дочерних элементов, если это контейнер, поэтому достаточно вызвать его один раз в главном контейнере (обычно в главном окне), чтобы показать все виджеты. – gianmt