gpt4 book ai didi

python - GTK3 - Python Treeview 过滤函数

转载 作者:行者123 更新时间:2023-12-04 03:37:51 25 4
gpt4 key购买 nike

我有一个带有 TreeView 和树存储的简单 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()

最佳答案

你试过link的最后一个例子中的方法了吗? ?

示例中使用了带有列表存储的 TreeView , TreeView 使用带有列表存储过滤器的函数进行了更新。您可以尝试根据需要修改代码(treeview 和 treestore)。

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

关于python - GTK3 - Python Treeview 过滤函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66561266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com