Gtk 如何获取列表框中的行数?

Gtk 如何获取列表框中的行数?,gtk,vala,Gtk,Vala,我不知道这是否是一个合适的地方,但我不知道还有什么地方可以问:p在Python中,应该是len(listbox)。换句话说,只需获取列表框的长度。在Python中,它将是len(列表框)。换句话说,只需获取列表框的长度。如果通过将Gtk.listbox绑定到一个模型,则使用GLib.ListModel方法 如果没有,那么基本上有两种方法,跟踪添加/删除的项目,或者在每次需要计数时通过Gtk.Container方法(Gtk.ListBox继承自Gtk.Container)计算它们 为了跟踪计数,您

我不知道这是否是一个合适的地方,但我不知道还有什么地方可以问:p

在Python中,应该是
len(listbox)
。换句话说,只需获取列表框的长度。

在Python中,它将是
len(列表框)
。换句话说,只需获取列表框的长度。

如果通过将Gtk.listbox绑定到一个模型,则使用GLib.ListModel方法

如果没有,那么基本上有两种方法,跟踪添加/删除的项目,或者在每次需要计数时通过Gtk.Container方法(Gtk.ListBox继承自Gtk.Container)计算它们

为了跟踪计数,您可以扩展/subclass Gtk.ListBox并重写add/remove方法,保留一个具有子级数量的属性/字段,或者将信号处理程序连接到Gtk.Container add/remove signals并保持相同的计数

最简单的方法(效率不高)是使用
@foreach
方法,该方法对所有子对象进行迭代并计算数字。计数将在每次方法调用时进行。如果这是你会做很多次的事情,那么它会产生一些影响

下面是一个非常基本的示例,我们在Gtk.ListBox中添加了一些Gtk.Label,尽管我们知道添加的标签的数量,但我们将通过单击按钮来计算它们:

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;
}

如果通过将Gtk.ListBox绑定到模型,则使用GLib.ListModel方法

如果没有,那么基本上有两种方法,跟踪添加/删除的项目,或者在每次需要计数时通过Gtk.Container方法(Gtk.ListBox继承自Gtk.Container)计算它们

为了跟踪计数,您可以扩展/subclass Gtk.ListBox并重写add/remove方法,保留一个具有子级数量的属性/字段,或者将信号处理程序连接到Gtk.Container add/remove signals并保持相同的计数

最简单的方法(效率不高)是使用
@foreach
方法,该方法对所有子对象进行迭代并计算数字。计数将在每次方法调用时进行。如果这是你会做很多次的事情,那么它会产生一些影响

下面是一个非常基本的示例,我们在Gtk.ListBox中添加了一些Gtk.Label,尽管我们知道添加的标签的数量,但我们将通过单击按钮来计算它们:

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;
}

看起来太容易了。碰巧你知道如何在瓦拉做同样的事?我已经搜索了,但找不到属性或方法。看起来太简单了。碰巧你知道如何在瓦拉做同样的事?我已搜索,但找不到属性或方法。