我有一个pythontkinter
应用程序,其中包含一个ttk.treeview
小部件。在
小部件显示在特定目录树上找到的具有特定扩展名的文件的列表-这对于使用tt.treeview
小部件构建来说很简单。在
有一个请求来启用对树的“动态”过滤——例如,用户在Entry
中键入一些字符串,当他/她键入时,树会删除到目前为止与输入的字符串不匹配的元素。在
我在研究Treeview
文档,尝试了detach
和{
detach
确实从树中删除了不匹配的元素,但是如果用户点击Backspace,我就不能再在树上正确迭代来恢复那些分离的元素,因为get_children
方法不会返回它们。在
def filter_tree(self):
search_by = self.search_entry.get()
self.tree_detach_leaf_by_regex(self.current_loaded_folder, search_by, "")
def tree_detach_leaf_by_regex(self, root, regex, parent):
if self.treeview.get_children(root):
for child in self.treeview.get_children(root):
self.tree_detach_leaf_by_regex(child, regex, root)
else:
if not re.match(regex, self.treeview.item(root)["text"]):
self.elements_index_within_parent[root] = self.treeview.index(root)
self.elements_parents[parent] = 1
self.treeview.detach(root)
else:
self.treeview.reattach(root, parent, self.elements_index_within_parent[root])
期待您的建议。在
为了让任何人都能重复使用我的答案,我必须告诉你的不仅仅是直接回答你的问题。如果您直接想了解如何获取分离项(因此不使用无法获取分离项id的方法
get_children
),请跳到名称为_columns_searcher
的方法的定义。简介
让我们首先定义一些属性。在
核心答案
下面是直接说明如何重新连接用户分离项的部分。首先注意,正如OP所提到的,
^{pr2}$get_children
只返回附加项的id。第二点需要注意的是,重新附加分离的项目的唯一方法是它们的id。这意味着在分离它们时要跟踪/保存它们,以便能够重新附加它们。在请注意,上面的
children
包含所有项目,只要它们是分离的。在相关问题 更多 >
编程相关推荐