2014-07-15 10 views
1

저는 그릴 수 없습니다. 이미 자습서를 읽었으므로 문제를 찾을 수 없습니다. Glade에서 그리는 올바른 UI가 있습니다. 그럼, 예를 들면 50 개의 그림 영역을 그립니다. 그래서 저는 50 개의 세포를 가진 그리드를 만듭니다; 각 셀에는 세로 상자가 있습니다 (도면 영역과 각 셀 안에 레이블이 있음). 하지만 나는 아무것도 볼 수 없습니다.Gtk.DrawingArea에서 그릴 수 없습니다.

class collega_GUI: 


    def __init__(self): 

     try: 

      self.__builder = Gtk.Builder() 
      self.__builder.add_from_file('UI2.glade') 

      self.__Grid = Gtk.Grid() 
      self.__Grid.set_margin_left(20) 
      self.__Grid.set_margin_right(20) 
      self.__Grid.set_row_spacing(10) 
      self.__Grid.set_column_spacing(15) 
      self.__Grid.set_column_homogeneous(True) 
      self.__GridBox = self.__builder.get_object('box11') 
      self.__GridBox.pack_end(self.__Grid, 1, 1, 20) 

      indirizzi_ip = [] 
      for i in range(50): 
       indirizzi_ip.append(str(i)) 
      cpu_info = {} 
      for ip in indirizzi_ip: 
       cpu_info[ip] = dict() 
      left = 0 
      right = 0 

      for ip in indirizzi_ip: 
       cpu_info[ip]['drawing_area'] = Gtk.DrawingArea() 
       cpu_info[ip]['drawing_area'].set_size_request(100, 100) 
       cpu_info[ip]['drawing_area'].set_name(ip) 

       box = Gtk.VBox(False, 5) 
       box.add(cpu_info[ip]['drawing_area']) 
       label = Gtk.Label(ip) 
       box.add(label) 

       self.__Grid.attach(box, left, right, 1, 1) #object,left,right,top,bottom 
       cpu_info[ip]['drawing_area'].connect("draw", self.__draw) 
       label.show() 
       cpu_info[ip]['drawing_area'].show() #the draw should start now! 
       box.show() 

       # 5 drawing areas in a row 
       left += 1 
       if left == 5: 
        right += 1 
        left = 0 

      self.__builder.get_object('Azioni_Window').show() 
      Gtk.main() 

     except Exception as xe: 
      logging.error('%s' % str(xe)) 
      sys.exit() 


    def __draw(self, widget, context): 

     context.set_source_rgb(0.9, 0, 0.1) #rosso 
     context.set_source_rgb(0.1, 0.9, 0) #verde 
     context.set_source_rgb(0.8, 0.7, 0) #giallo 
     context.set_source_rgb(0.8, 0.7, 0.8) #inattivo 
     context.rectangle(0, 0, widget.get_allocated_width(), widget.get_allocated_height()) 
     context.fill() 


if __name__=='__main__': 

    try: 
     UINX=collega_GUI() 
    except Exception: 
     sys.exit() 
+0

GTK + 2 또는 3을 사용하고 있습니까? – pdw

+0

gi.repository를 사용하고 있기 때문에 3 – FrancescoN

답변

1

당신은 그리드의

self.__Grid.show() 

따라서 아무것도 누락되지있어 도시된다.

일반적으로 모든 개별 위젯 show()을 기억하기보다는 일부 최상위 컨테이너에서 show_all()을 호출하는 것이 더 쉽습니다.

+0

감사합니다. 젠장! – FrancescoN