在GTK+中创建网格

5

我不是要求实现代码,而是从抽象的角度来看,给定GTK+的技能集,实现一个网格使每个方格都可以点击等,最好的方法是什么?

3个回答

6
为了完成这个任务,我会使用一个表格 - 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 - 设置为None。
以这种方式进行操作将为您提供一个网格,每个元素的大小都相同,并且在单击网格中的项目时会触发事件。
上述假设网格将有多行,如果您只计划使用一行,则最好使用GtkHButtonBox - http://library.gnome.org/devel/gtk/stable/GtkHButtonBox.html或GtkVButtonBox -http://library.gnome.org/devel/gtk/stable/GtkVButtonBox.html

5
如果网格将会很大,您也可以考虑使用GtkTreeView。它可以将树形结构显示为网格,并支持矩形选择。单元格可以显示文本、数字和简单的小部件,如推按钮、切换按钮、选项菜单、进度条等等。即使在大数据集(成千上万行)下,它的性能表现也很好,并具有诸如列排序等不错的功能。但是,它的API相当复杂:这是一个完整的MVC模式,需要一些探索才能使其良好运作。在gtk-demo中有一些示例代码:请查看“Tree View”下的“Editable Cells”演示。

0

我赞同mlowen的建议,使用GtkTable作为网格的主要组织方式,可以很容易地获得类似网格的外观。如果您不需要按钮的内置绘制,则还可以考虑使用普通的GtkEventBox填充每个单元格。

事件框是一个不可见的小部件,基本上添加了一个窗口并使覆盖区域可点击。它对于使一些GTK+中原本“静默”的小部件更具交互性非常有用,例如,在GtkLabel后面常用于使其可点击;如果标签提供了足够的绘图功能以满足您的需求,那么这也是一种可能的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接