根据我对GTK的理解,如果我有一个TreeView,我不能只使用我想要显示有关列的信息的任何小部件。对于文字,您需要gtk.CellRendererText
。对于切换按钮,gtk.CellRendererToggle
。对于其他任何事情,似乎你必须自己实现,从我看到的按钮样本,看起来并不简单。
首先,是这样的吗?是否有一种简单的方法来设置您想要用于显示某些文本的任何小部件?如果没有,那为什么这样实现呢?如果我正在设计GTK,我会创建某种系统,当添加一行并且某些数据模型信息发生变化时,将调用用户指定的回调,这将分别添加相应的小部件或更改它。
答案 0 :(得分:2)
编写自定义CellRenderer(copy-pasted from this link!):
注册您的一些新属性 渲染器需要类型系统 并编写自己的 set_property 和 get_property 设置和获取的功能 您的新渲染器的属性。
编写您自己的 cell_renderer_get_size 功能并覆盖父级 对象的功能(通常是父对象) 是GtkCellRenderer类型。注意 你应该遵守这个标准 填充和单元格的属性 在这里对齐父对象。
编写您自己的 cell_renderer_render 功能并覆盖父级 对象的功能。这个功能呢 实际渲染。
和there is a good/simple example for pyGTK。
编写自定义CellRenderer并不太难,硬度是如何编写自定义窗口小部件。如果您已经学会了如何编写自定义窗口小部件,那么编写自定义CellRenderer很容易。
这种设计背后的逻辑是灵活性。 TreeViewColumn指示CellRenderer应如何显示数据(来自TreeModel),因此表示布尔类型值的TreeViewColumn可以显示为文本(CellRendererText)或可以显示为复选框(CellRendererToggle)。例如表示整数类型值的TreeViewColumn可以显示为文本(CellRendererText),也可以显示为进度条(CellRendererProgress),也可以显示为旋转按钮(CellRendererSpin),也可以显示为我们想要的所有内容