我想要一个行为,如果你点击第一个listitem打开做一件事,如果我点击第二个listitem做其他事情。第三和第二个相同。
与交换机相似但在iconview中没有(我设置了animason和gtk.stack): https://www.youtube.com/watch?v=Lj2wKNYVFR8
这是代码:
var listbox = new Gtk.ListBox();
listbox.set_activate_on_single_click(true);
var l = new Watcher.List.ListItem("title", "subtitle");
listbox.insert(l, 0);
var l2 = new Watcher.List.ListItem("title2", "subtitle2");
listbox.insert(l2, 1);
“l”和l2是一个Gtk.ListBoxRow对象,所以基本上我将2个listboxrow项添加到列表框中。
点击Item do stuff:
listbox.row_selected.connect( ()=>{
stack.set_visible_child_name("new");
back.set_child_visible(true);
});
无论是单击列表中的第一项还是第二项,它都将始终显示名为“new”的堆栈子项。我可以访问ListBoxRow索引,但这仅适用于特定的行。
我需要将自定义格式化的项目添加到列表中,并且我被告知ListBox可以执行此操作。 (其他人不能?) 我的ListBoxRow只是一个有两个标签的网格,但我想稍后添加一些按钮。
答案 0 :(得分:1)
查看Listbox.row_selected()
的{{3}}:您会看到它有一个ListBoxRow参数。您应该更新row_selected
闭包以获得该参数 - 然后您可以使用闭包内的行来确定要设置的子项可见。
如果您确实需要知道列表框中行的索引,请致电row.get_index()
。