2014-05-14 2 views
3

GtkStack 용 GTK 3.10 문서를 간략하게 살펴 보았습니다. 스택과 같은 GTK 위젯의 속성을 변경하려면 어떻게해야합니까?

그것은 GtkStack이 속성 "아이콘 이름을"주어진에 아이가 추가 된 것을 언급

.

내 질문은 - 어떻게이 속성의 값을 변경할 수 있습니까? 그 이유는 - GtkStackSwitcher 버튼을 텍스트가 아닌 아이콘으로 변경하려고하지만 GtkStackSuitcher 버튼을 사용하지 않고 GtkStackSuitcher 버튼을 코딩하려고합니다.

gtk3-demo - 스택 데모와 UI 파일을 보면 GtkSwitcher에 아이콘이 있습니다. 내가 스택 객체에 GtkSpinner을 추가 한 - - 나는했습니다 당신이 볼 수 있듯이 우분투 14.04 GTK (3.10)

Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from gi.repository import Gtk 
>>> stack = Gtk.Stack() 
>>> spin = Gtk.Spinner() 
>>> stack.add_named(spin, "spin") 
>>> stack.show_all() 
>>> child = stack.get_visible_child() 
>>> child.props.icon_name = "go-previous" 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'gi._gobject.GProps' object has no attribute 'icon_name' 
>>> stack.props.icon_name = "go-previous" 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'gi._gobject.GProps' object has no attribute 'icon_name' 
>>> 

아래 python3 인터프리터를 사용

enter image description here

<?xml version="1.0" encoding="UTF-8"?> 
<interface> 
    <!-- interface-requires gtk+ 3.6 --> 
    <object class="GtkWindow" id="window1"> 
    <property name="can_focus">False</property> 
    <property name="title" translatable="yes">GtkStack</property> 
    <child> 
     <object class="GtkGrid" id="grid1"> 
     <property name="visible">True</property> 
     <property name="can_focus">False</property> 
     <child> 
      <object class="GtkStackSwitcher" id="switcher"> 
      <property name="visible">True</property> 
      <property name="stack">stack</property> 
      <property name="halign">center</property> 
      </object> 
      <packing> 
      <property name="left_attach">0</property> 
      <property name="top_attach">0</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkStack" id="stack"> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="transition-type">crossfade</property> 
      <child> 
       <object class="GtkImage" id="image1"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="margin-top">20</property> 
       <property name="margin-bottom">20</property> 
       <property name="resource">/application/gtk-logo-48.png</property> 
       </object> 
       <packing> 
       <property name="name">page1</property> 
       <property name="title" translatable="yes">Page 1</property> 
       </packing> 
      </child> 
      <child> 
       <object class="GtkCheckButton" id="checkbutton1"> 
       <property name="label" translatable="yes">Page 2</property> 
       <property name="visible">True</property> 
       <property name="can_focus">True</property> 
       <property name="receives_default">False</property> 
       <property name="xalign">0</property> 
       <property name="draw_indicator">True</property> 
       <property name="halign">center</property> 
       <property name="valign">center</property> 
       </object> 
       <packing> 
       <property name="name">page2</property> 
       <property name="title" translatable="yes">Page 2</property> 
       </packing> 
      </child> 
      <child> 
       <object class="GtkSpinner" id="spinner1"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="halign">center</property> 
       <property name="valign">center</property> 
       <property name="active">True</property> 
       </object> 
       <packing> 
       <property name="name">page3</property> 
       <property name="icon-name">face-laugh-symbolic</property> 
       </packing> 
      </child> 
      </object> 
      <packing> 
      <property name="left_attach">0</property> 
      <property name="top_attach">1</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     </object> 
    </child> 
    </object> 
</interface> 

추가 된 자식에 액세스하려고 시도한 다음 "icon-name"속성을 변경했습니다.

기쁨. 그래서 내가 뻔한 실수는 무엇입니까?

답변

8

가벼운하지만 중요한 구별 : icon-nameGtkStack의 자녀의 '속성'이 아니며, GtkStack의 '자녀 속성'입니다.

차이점은 "하위 속성"은 컨테이너와 하위 위젯 중 하나와 하위 컨테이너 사이의 관계에 영향을 미친다는 점입니다.

사용이 :

stack.child_set_property(child, 'icon-name', 'go-previous') 
관련 문제