我有一个带有树视图和树存储的简单 GTK3 GUI。我需要用data3
字符串过滤列并只显示data3
行。但它也隐藏了data3
行。因为列的父行data3
也被隐藏了。
当我使用return model[iter][2] == "data2"
而不是return model[iter][2] == "data3"
.
通过注释掉这一行可以查看所有行:filter1.set_visible_func(filter1_func)
我该如何解决这个问题?
简化代码:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GLib
builder = Gtk.Builder()
builder.add_from_file('test.glade')
builder.get_objects()
window1 = builder.get_object('window1')
treeview1 = builder.get_object('treeview1')
class Signals:
def on_window1_destroy(self, widget):
Gtk.main_quit()
def filter1_func(model, iter, data):
return model[iter][2] == "data3"
list_data = [["text1", "data1", "data2"], ["text2", "data1", "data2"], ["text3", "data1", "data3"]]
treestore1 = Gtk.TreeStore(str, str, str)
piter1 = treestore1.append(None, list_data[0])
piter2 = treestore1.append(piter1, list_data[1])
piter3 = treestore1.append(piter1, list_data[2])
treeview1.set_model(treestore1)
filter1 = treestore1.filter_new()
filter1.set_visible_func(filter1_func)
filter1.refilter()
for i, column_title in enumerate(["col1", "col2", "col3"]):
renderer = Gtk.CellRendererText()
column = Gtk.TreeViewColumn(column_title, renderer, text=i)
treeview1.append_column(column)
treeview1.set_model(filter1)
treeview1.expand_all()
builder.connect_signals(Signals())
window1.show_all()
Gtk.main()