我不是要求代码实现,但是考虑到GTK +的技能,从抽象的角度来看,实现网格的最佳方式是什么,每个方块都是可点击的等等?
答案 0 :(得分:5)
就此而言,我会使用表格http://library.gnome.org/devel/gtk/stable/GtkTable.html - 并用按钮填充它 - http://library.gnome.org/devel/gtk/stable/GtkButton.html。如果您不希望按钮看起来像是按钮,那么我会将浮雕 - http://library.gnome.org/devel/gtk/stable/GtkButton.html#gtk-button-set-relief - 设置为无。
以这种方式执行此操作将为您提供一个网格,其中每个元素的大小相同,并且当您单击网格中的项目时会触发事件。
以上假设网格将有多行,如果您只打算使用一行,那么最好使用GtkHButtonBox - http://library.gnome.org/devel/gtk/stable/GtkHButtonBox.html - 或GtkVButtonBox - http://library.gnome.org/devel/gtk/stable/GtkVButtonBox.html。
答案 1 :(得分:5)
如果网格很大,您还可以考虑GtkTreeView。
它可以将树显示为网格,并支持矩形选择。单元格可以显示文本,数字和简单的小部件,如按钮,切换,选项菜单,进度条等。它表现良好,即使在大型数据集(数千行)上也具有良好的功能,如列排序等。 / p>
API相当复杂但是:-(这是一个完整的MVC,并且需要一点点才能让它运行良好。
gtk-demo中有一些示例代码:查看“树视图”下的“可编辑单元格”演示。
答案 2 :(得分:0)
我是第二个mlowen建议使用GtkTable作为网格的主要组织,它很容易得到网格状外观。如果您不需要按钮的内置绘图,您可能还想调查使用普通GtkEventBox填充每个单元格。
事件框是一个不可见的小部件,它基本上添加了一个窗口并使覆盖区域可以点击。让一些GTK +的“静音”小部件更具交互性是很有用的,例如它通常在GtkLabel后面使用以使其可点击;如果标签为您的需求提供了足够的绘图功能,那么这也是一种可能的继续。