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 对象。当然,你总是会从中得到元素的总数。
我想在应用过滤器后获取 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 对象。当然,你总是会从中得到元素的总数。