【问题标题】:Missing text in GUI (PyGObject)GUI 中缺少文本 (PyGObject)
【发布时间】:2013-02-20 07:50:00
【问题描述】:

我已经使用 xml 描述文件创建了一个带有 pyGObject 的 GUI,我正在尝试使用 GtkTreeView 创建一个侧边栏。 GtkTreeView 没有在我的 GUI 的标题和子项中显示 任何 文本,即使我添加了一些。这是为什么?我该如何解决?

侧边栏应显示以下内容:

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>

【问题讨论】:

    标签: python user-interface gtk gtk3 pygobject


    【解决方案1】:

    很简单,您没有将任何列映射到文本渲染器。

    顺便说一句,您使用什么编辑器来创建 UI?你是手写的吗?使用 Glade,这样生活更轻松。

    在 Glade 中,右键单击 TreeView -> Edit -> Hierarchy -> Select Cell Renderer -> Text mapped to the column in the model.

    以下是通过 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-11
      • 2019-08-05
      • 2018-10-16
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      相关资源
      最近更新 更多