use*_*426 3 gtk haskell glade gtktreeview
这就是我当前从glade文件初始化Tree视图的方法(删除了不感兴趣的部分)
tree_view <- xmlGetWidget xml castToTreeView "tree_view"
Run Code Online (Sandbox Code Playgroud)
为了方便起见,我如何使用已填充文本字段中的文本向tree_view添加新条目?
text <- get text_field entryText
Run Code Online (Sandbox Code Playgroud)
愿有人帮帮我吗?
谢谢
小智 8
根据您的描述,我假设您有树视图,但没有正确设置.如果您没有将GTK树视图连接到其他几个小部件,那么它就毫无价值.
树模型,用于保存要在树视图中显示的数据.树模型可以是列表存储,它将数据存储为列表,也可以是树存储,它将数据存储为树,节点包含子节点.在您的情况下,您可能需要创建一个ListStore:
store <- listStoreNew String
Run Code Online (Sandbox Code Playgroud)
树模型可以存储任何类型的数据,包括复杂的自定义数据类型.
要显示的每条数据的树视图列.在这种情况下,我们只需要一列,因为我们想要每行显示一个字符串:
column <- treeViewColumnNew
Run Code Online (Sandbox Code Playgroud)树视图列必须知道要显示的数据以及如何显示它(作为文本,作为复选框,作为图片......)所以我们需要一个单元格渲染器.单元格渲染器将从树模型中的每一行获取一段数据,并在给定列中显示它.要显示文本,需要CellRendererText.还有其他类型的单元格渲染器用于以其他形式显示数据(例如,CellRendererToggle用于True/False值).
-- Create a cell renderer for displaying text
cell <- cellRendererTextNew
-- Add the cell renderer to the column. A column may display one or more
-- pieces of data; just pack the cell renderers into the column
cellLayoutPackStart column cell True
-- Let the cell renderer know where it has to get the data from
-- (in this case, the only element of each row). Note that we
-- want to display some text
cellLayoutSetAttributes column cell store $ \row -> [ cellText := row ]
Run Code Online (Sandbox Code Playgroud)接下来,将列插入树视图中.如果您不这样做,该列将不会显示!
-- Insert the column into the tree view
_ <- treeViewAppendColumn tree_view column
-- Optional: Give a header/title to the column
treeViewColumnSetTitle column "My data"
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要:将树视图连接到树模型:
treeViewSetModel tree_view store
Run Code Online (Sandbox Code Playgroud)
现在,您应该在树视图中看到一个空列.请参阅http://hackage.haskell.org/package/gtk上的gtk包文档,了解如何在树模型中插入,删除和获取数据(listStoreAppend,listStoreRemove,listStoreGetValue等)
请注意,每个树模型都有一个类型,并且只能处理该类型的数据(但您可以使用任何数据类型,甚至是您自己的数据类型,因此如果正确设置每个树视图列,您确实可以存储和显示复杂数据行).否则,编译程序时会出现类型错误.
| 归档时间: |
|
| 查看次数: |
1081 次 |
| 最近记录: |