【问题标题】:Python Gtk3 : Get number of filtered rows in a TreeviewPython Gtk3:获取树视图中过滤的行数
【发布时间】:2017-07-15 13:36:11
【问题描述】:

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

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

编辑:根据 Rawing 的要求,我的程序的 sn-p :

    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 是一个条目,用户在其中输入一个字符串,过滤器通过该字符串应用于第三列

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

【问题讨论】:

  • 我不确定你在说什么这个“过滤器”。您能否发布一小段代码来创建 Treeview 并对其应用过滤器? (见minimal reproducible example

标签: python-3.x gtk gtk3 gtktreeview


【解决方案1】:

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

您只需调用len(self.ps_filter),而不是调用self.listfortreeview.iter_n_children()listfortreeview未过滤 ListStore 对象。当然,您将始终从中获得元素的总数。

【讨论】:

  • 非常感谢,它成功了!我尝试同时使用 len 和 iter_n_child ,但正如你所提到的,我在错误的对象上使用它们,这就是为什么我得到错误的行数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多