不知道这是否适合提问,但我不知道在哪里:p
答案 0 :(得分:2)
如果通过bind_model
将Gtk.ListBox绑定到模型,则可以使用GLib.ListModel get_n_items
方法。
如果你没有,那么你基本上有两种方法,跟踪添加/删除的项目或通过Gtk.Container @foreach
方法每次需要计算时计算它们(Gtk.ListBox继承自Gtk .Container)。
要跟踪计数,您可以扩展/子类化Gtk.ListBox并覆盖添加/删除方法并保留具有子项数的属性/字段,或者将信号处理程序连接到Gtk.Container添加/删除信号和保持同样的数量。
最简单的方法,不是那么有效,是使用@foreach
方法,它由所有孩子迭代并计算数字。计数将在每次方法调用时完成。如果这是你会多次做的事情,那么它会产生一些影响。
这是一个非常基本的示例,我们将一些Gtk.Label添加到Gtk.ListBox中,虽然我们知道添加标签的数量,但我们将通过单击按钮来计算它们:
using Gtk;
int main (string[] args) {
Gtk.init (ref args);
var window = new Window ();
window.title = "Vala Listbox Example";
window.border_width = 10;
window.window_position = WindowPosition.CENTER;
window.set_default_size (350, 70);
window.destroy.connect (Gtk.main_quit);
var box = new Gtk.Box (Orientation.VERTICAL, 5);
var listbox = new ListBox ();
int i = 10;
for (i = 0; i < 10; i++) {
listbox.add (new Label ("A label"));
}
var button = new Button.with_label ("Get count!");
button.clicked.connect (() => {
int count = 0;
listbox.@foreach (() => {
count++;
});
print ("Count = %d\n", count);
});
box.add (listbox);
box.add (button);
window.add (box);
window.show_all ();
Gtk.main ();
return 0;
}
假设我们调用此文件main.vala
,编译为:
valac main.vala --pkg gtk+-3.0
答案 1 :(得分:1)
在Python中,它将是len(listbox)
。换句话说,只需获取列表框的长度。