我在主窗口UI文件中添加了gtk小部件,但未显示

时间:2019-08-26 08:24:26

标签: xml gtk3 gnome gtkbuilder gnome-builder

我试图将GtkImage添加到我的主窗口* .ui文件中,该文件是使用GNOME Builder项目模板制作的。

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <requires lib="gtk+" version="3.20"/>
  <template class="PodiumWindow" parent="GtkApplicationWindow">
    <property name="default-width">600</property>
    <property name="default-height">300</property>
    <child type="titlebar">
      <object class="GtkHeaderBar" id="headerBar">
        <property name="visible">True</property>
        <property name="show-close-button">True</property>
        <property name="title">Podium</property>
      </object>
    </child>
    <child>
    <object class="GtkImage">
          <property name="visible">True</property>
          <property name="icon-name">open-menu-symbolic</property>
          <property name="icon-size">1</property>
    </object>
    <object class="GtkLabel" id="label">
      <property name="label">Ready your pencils!</property>
      <property name="visible">True</property>
      <attributes>
        <attribute name="weight" value="bold"/>
        <attribute name="scale" value="2"/>
      </attributes>
    </object>
    </child>
  </template>
</interface>

但是图像未出现在窗口中: HelloWorld Window

我与GTK +检查器(Ctrl + Shift + D)进行了检查,但在层次结构中看不到GtkImage。有人知道我在想什么吗?

2 个答案:

答案 0 :(得分:1)

GtkWindowGtkBin的子类,这意味着它一次只能生一个孩子。

因此,图像首先添加,但是在添加标签时再次移除。

要解决您的问题,您需要添加一个中间容器(例如GtkGridGtkBox)。

答案 1 :(得分:0)

基于弗洛里安的回答,我在下面发布了我的工作* .UI代码:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <template class="PodiumWindow" parent="GtkApplicationWindow">
    <property name="can_focus">False</property>
    <property name="default_width">600</property>
    <property name="default_height">300</property>
    <child type="titlebar">
      <object class="GtkHeaderBar" id="headerBar">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="title">Podium</property>
        <property name="show_close_button">True</property>
      </object>
    </child>
    <child>
      <object class="GtkBox">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="valign">center</property>
        <property name="vexpand">True</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkImage">
            <property name="visible">True</property>
            <property name="icon-name">open-menu-symbolic</property>
            <property name="icon-size">1</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <placeholder/>
        </child>
        <child>
          <object class="GtkLabel" id="label">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label">Ready your pencils!</property>
            <attributes>
              <attribute name="weight" value="bold"/>
              <attribute name="scale" value="2"/>
            </attributes>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">2</property>
          </packing>
        </child>
      </object>
    </child>
  </template>
</interface>

HelloWorld Window with image