如何获取ListBox中的行数?

问题描述 投票:0回答:2

不知道这是否适合问,但我不知道在哪里:p

gtk vala
2个回答
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
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.