2013-02-20 3 views
0

xml 설명 파일을 사용하여 pyGObject로 GUI를 만들었으며 GtkTreeView으로 사이드 바를 만들려고합니다. GtkTreeView은 일부를 추가 했는데도 텍스트를 내 GUI의 헤더와 하위에 표시하지 않습니다. 왜 그런가요? 어떻게 해결할 수 있습니까?GUI (PyGObject)에 누락 된 텍스트

사이드 바는 다음과 같이해야 :

Parent 1 
    Child 1 
    Child 2 
    Child 3 

내 코드의 짧은 버전은 다음과 같습니다.

App.py

#!/usr/bin/env python2 

from gi.repository import Gtk 


class AppUI: 
    def __init__(self): 
     self.builder = Gtk.Builder() 
     self.builder.add_from_file("app.xml") 
     self.window = self.builder.get_object("main-window") 
     self.sidebarStore = self.builder.get_object("sidebar-store") 

     for parent in range(4): 
      piter = self.sidebarStore.append(None, ['parent %i' % parent]) 
      for child in range(3): 
       self.sidebarStore.append(piter, ['child %i of parent %i' % (child, parent)]) 
     self.handlers = { 
      "onDeleteWindow": Gtk.main_quit, 
     } 
     self.builder.connect_signals(self.handlers) 

     self.window.show_all() 

UI = AppUI() 
Gtk.main() 

app.xml :

<?xml version="1.0" encoding="UTF-8"?> 
<interface> 
    <object class="GtkTreeStore" id="sidebar-store"> 
     <columns> 
      <column type="gchararray"/> 
     </columns> 
    </object> 
    <object class="GtkWindow" id="main-window"> 
     <property name="title"></property> 
     <signal name="delete-event" handler="onDeleteWindow"/> 
     <child> 
      <object class="GtkBox" id="container"> 
       <property name="orientation">horizontal</property> 
       <child> 
        <object class="GtkTreeView" id="sidebar"> 
         <property name="model">sidebar-store</property> 
         <property name="headers-visible">false</property> 
         <child> 
          <object class="GtkTreeViewColumn" id="test-column"> 
           <child> 
            <object class="GtkCellRendererText" id="test-renderer"/> 
           </child> 
          </object> 
         </child> 
        </object> 
       </child> 
       <child> 
        <object class="GtkBox" id="right-container"> 
         <property name="orientation">vertical</property> 
         <child> 
          <object class="GtkButtonBox" id="top-buttonbox"> 
           <child> 
            <object class="GtkButton" id="add-button"> 
             <property name="label">Add</property> 
            </object> 
           </child> 
           <child> 
            <object class="GtkButton" id="delete-button"> 
             <property name="label">Delete</property> 
            </object> 
           </child> 
          </object> 
         </child> 
        </object> 
       </child> 
      </object> 
     </child> 
    </object> 
</interface> 

답변

2

은 아주 쉽게, 당신은 텍스트 렌더링에 대한 열을 매핑하지 않은 UI 설명.

그런데 UI 작성에 사용하는 편집기는 무엇입니까? 당신이 손으로 그것을 writting 있습니까? Glade를 사용하면 인생은 그만큼 쉬울 것입니다.

Glade에서는 모델의 열에 매핑 된 TreeView -> 편집 -> 계층 구조 -> 셀 렌더러 선택 -> 텍스트를 마우스 오른쪽 버튼으로 클릭합니다.

다음은 Glade를 통해 편집 된 XML의 수정 된 버전입니다. 가장 관련있는 부분은 다음과 같습니다.

<attributes> 
    <attribute name="text">0</attribute> 
</attributes> 

텍스트 셀 렌더러를 정의한 경우.

<?xml version="1.0" encoding="UTF-8"?> 
<interface> 
    <!-- interface-requires gtk+ 3.0 --> 
    <object class="GtkTreeStore" id="sidebar-store"> 
    <columns> 
     <!-- column-name gchararray --> 
     <column type="gchararray"/> 
    </columns> 
    </object> 
    <object class="GtkWindow" id="main-window"> 
    <property name="can_focus">False</property> 
    <signal name="delete-event" handler="onDeleteWindow" swapped="no"/> 
    <child> 
     <object class="GtkBox" id="container"> 
     <property name="can_focus">False</property> 
     <child> 
      <object class="GtkTreeView" id="sidebar"> 
      <property name="width_request">100</property> 
      <property name="can_focus">False</property> 
      <property name="model">sidebar-store</property> 
      <property name="headers_visible">False</property> 
      <child internal-child="selection"> 
       <object class="GtkTreeSelection" id="treeview-selection1"/> 
      </child> 
      <child> 
       <object class="GtkTreeViewColumn" id="test-column"> 
       <child> 
        <object class="GtkCellRendererText" id="test-renderer"/> 
        <attributes> 
        <attribute name="text">0</attribute> 
        </attributes> 
       </child> 
       </object> 
      </child> 
      </object> 
      <packing> 
      <property name="expand">False</property> 
      <property name="fill">True</property> 
      <property name="position">0</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkBox" id="right-container"> 
      <property name="can_focus">False</property> 
      <property name="orientation">vertical</property> 
      <child> 
       <object class="GtkButtonBox" id="top-buttonbox"> 
       <property name="can_focus">False</property> 
       <child> 
        <object class="GtkButton" id="add-button"> 
        <property name="label">Add</property> 
        <property name="use_action_appearance">False</property> 
        <property name="can_focus">False</property> 
        <property name="receives_default">False</property> 
        <property name="use_action_appearance">False</property> 
        </object> 
        <packing> 
        <property name="expand">False</property> 
        <property name="fill">True</property> 
        <property name="position">0</property> 
        </packing> 
       </child> 
       <child> 
        <object class="GtkButton" id="delete-button"> 
        <property name="label">Delete</property> 
        <property name="use_action_appearance">False</property> 
        <property name="can_focus">False</property> 
        <property name="receives_default">False</property> 
        <property name="use_action_appearance">False</property> 
        </object> 
        <packing> 
        <property name="expand">False</property> 
        <property name="fill">True</property> 
        <property name="position">1</property> 
        </packing> 
       </child> 
       </object> 
       <packing> 
       <property name="expand">False</property> 
       <property name="fill">True</property> 
       <property name="position">0</property> 
       </packing> 
      </child> 
      </object> 
      <packing> 
      <property name="expand">False</property> 
      <property name="fill">True</property> 
      <property name="position">1</property> 
      </packing> 
     </child> 
     </object> 
    </child> 
    </object> 
</interface>