2014-05-14 139 views
3

我一直在快速浏览GtkStack的GTK 3.10文档。如何更改GTK窗口小部件(如堆栈)的属性?

它提到孩子添加到GtkStack被赋予的属性“图标名称”。

我的问题是 - 我怎样才能改变这个属性的值。原因 - 我想将GtkStackSwitcher按钮更改为图标而不是文本,但我想编码 - 不使用GktBuilder用户界面。

如果你看看gtk3-demo-Stack演示和UI文件,你可以看到GtkSwitcher有一个图标。

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> 

使用python3解释的Ubuntu 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' 
>>> 

下你可以看到 - 我添加了一个GtkSpinner到堆栈对象 - 我已经试图访问已添加的孩子,然后更改“icon-name”属性。

没有快乐。那么我在做什么是明显的错误?

回答

8

轻微但重要的区别:icon-name不是GtkStack的孩子的“财产”,它是GtkStack的“子财产”。

区别在于“子属性”会影响容器与其子控件之一之间的关系,而不仅仅是容器或子控件。

使用此:

stack.child_set_property(child, 'icon-name', 'go-previous') 
相关问题