Python Gtk3:获取树视图中筛选的行数

Python Gtk3 : Get number of filtered rows in a Treeview

我想在应用过滤器后获取 Treeview 中的行数。我尝试在过滤行后使用 len(Gtk.ListStore) 和 Gtk.Liststore.iter_n_children() 但这两个函数都返回了没有过滤的行总数。

有什么方法可以获得过滤后返回的行数?

编辑:根据 Rawing 的要求,我的程序片段:

    self.listfortreeview = Gtk.ListStore(str, str, str, str, str, str, str, str, str, str, str)
    for item in win.result:
        self.listfortreeview.append(list(item))

    self.current_ps_filter = None

    self.ps_filter = self.listfortreeview.filter_new()
    self.ps_filter.set_visible_func(self.ps_filter_func)

    self.ps_filter_sorted = Gtk.TreeModelSort(model=self.ps_filter)

    self.votertreeview = Gtk.TreeView.new_with_model(self.ps_filter_sorted)
    for i, coltitle in enumerate(["ID", "WARD", "PS NO", "SR NO", "NAME", "RELATION'S NAME", "SEX", "AGE", "ADDRESS",
                                  "PSTATION", "IDCARD NO"]):
        rendered = Gtk.CellRendererText(foreground = "blue")
        column = Gtk.TreeViewColumn(coltitle, rendered, text=i)
        column.set_sort_column_id(i)
        self.votertreeview.append_column(column)

    def filter_btn_clicked(self, button):
        self.get_typed_filter = self.filter_text.get_text().strip()
        if self.get_typed_filter == "":
            self.current_ps_filter = "None"
        else:
            self.current_ps_filter = self.get_typed_filter
        self.ps_filter.refilter()
        self.text_Filtered_records = "\tFiltered Records : " + str(self.listfortreeview.iter_n_children())
        self.label_Filtered_records.set_text(self.text_Filtered_records)
        self.label_Filtered_records.show()

    def ps_filter_func(self, model, iter, data):

        if self.current_ps_filter is None or self.current_ps_filter == "None":
            return True
        elif self.combo_text == "PS No.":
            return model[iter][2] == self.current_ps_filter

这里 - win.result 是一个元组列表

self.filter_text 是一个条目,用户在其中输入一个字符串,通过该字符串过滤器应用于第 3 列

self.combo_text 是一个组合框,用户可以通过它选择要执行的列(为简单起见,考虑过滤器将始终应用于第 3 列)

您在错误的对象上调用了函数。此外,可以使用内置 len 函数代替 iter_n_children.

无需调用 self.listfortreeview.iter_n_children(),您只需调用 len(self.ps_filter)listfortreeview 未过滤的 ListStore 对象。当然,你总是会从中得到元素的总数。