【发布时间】: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