GTK3 Python树视图过滤器函数

2024-09-29 11:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有treeview和treestore的简单GTK3GUI。我需要用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()

Tags: gtkdatamodelbuildercolumnlistfuncset
1条回答
网友
1楼 · 发布于 2024-09-29 11:18:34

您在link的最后一个示例中尝试过该方法吗

示例中使用了带有liststore的treeview,并使用带有liststore筛选器的函数更新treeview。您可以尝试根据需要修改代码(treeview with treestore)

注意:它是用于liststore的。我不知道它是否适用于liststore的treeview。您可以尝试通过更新整个模型来使用treestore更新您的treeview,但这可能会在计算上很昂贵

相关问题 更多 >