2015-09-26 45 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不是空的。

感谢您的帮助。

编辑:
好吧,我想这简单的事情:

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