Tkinter Treeview 搜索在搜索子项时不会最大化
Tkinter Treeview Search Does not maximize when children is searched
# 当我在 Tkinter Treeview 中搜索 3 个字符的关键字时,搜索 #children 的子级,但是子级没有最大化,但是当手动 #maximized 时,子级被高亮显示。此外,搜索到的关键字不会#scroll window。有办法吗?请帮忙。
Search when scrolled manually and maximized the level
def search(self, item=''):
search_pattern = str(self.searchText.get())
if len(search_pattern) < 3:
return
children = self.tree.get_children(item)
for child in children:
value_list = self.tree.item(child)["values"]
#print(value_list)
for i in range(len(value_list)):
if type(value_list[0]) != int:
if value_list[0].isprintable():
#print(value_list[i],'printable')
#if value_list[0].lower().startswith(search_pattern.lower()):
if value_list[0].lower().find(search_pattern.lower()) != -1:
self.tree.selection_set(child)
else:
res = search(self,item=child)
search(self,item=child)
def search_box(root):
root.searchText = StringVar()
root.search_input = ttk.Entry(root, textvariable = root.searchText, justify = LEFT)
root.search_input.grid(column = 0, row = 0, padx=60, pady=5, sticky='NW', rowspan=2)
print(root.search_input)
print(root.searchText)
root.searchText.trace_variable("w",lambda x,y,z: search(root)) #
Callback if stringvar is updated
root.bind("<Return>", lambda x: hideEntry(root,x))
root.bind("<Escape>", lambda x: hideEntry(root,x))
要扩展分支,可以调用tree.item(iid, open=True)
。
要滚动到搜索完成的地方,您可以使用tree.see(iid)
。
在您的 search
方法中结合两者:
def search(self, item=''):
search_pattern = str(self.searchText.get())
if len(search_pattern) < 3:
return
children = self.tree.get_children(item)
for child in children:
value_list = self.tree.item(child)["values"]
for i in range(len(value_list)):
if type(value_list[0]) != int:
if value_list[0].isprintable():
if value_list[0].lower().find(search_pattern.lower()) != -1:
self.tree.item(item,open=True)
self.tree.selection_set(child)
self.tree.see(child)
else:
res = search(self,item=child)
search(self,item=child)
您可以在 treeview here 上阅读文档。
# 当我在 Tkinter Treeview 中搜索 3 个字符的关键字时,搜索 #children 的子级,但是子级没有最大化,但是当手动 #maximized 时,子级被高亮显示。此外,搜索到的关键字不会#scroll window。有办法吗?请帮忙。
Search when scrolled manually and maximized the level
def search(self, item=''):
search_pattern = str(self.searchText.get())
if len(search_pattern) < 3:
return
children = self.tree.get_children(item)
for child in children:
value_list = self.tree.item(child)["values"]
#print(value_list)
for i in range(len(value_list)):
if type(value_list[0]) != int:
if value_list[0].isprintable():
#print(value_list[i],'printable')
#if value_list[0].lower().startswith(search_pattern.lower()):
if value_list[0].lower().find(search_pattern.lower()) != -1:
self.tree.selection_set(child)
else:
res = search(self,item=child)
search(self,item=child)
def search_box(root):
root.searchText = StringVar()
root.search_input = ttk.Entry(root, textvariable = root.searchText, justify = LEFT)
root.search_input.grid(column = 0, row = 0, padx=60, pady=5, sticky='NW', rowspan=2)
print(root.search_input)
print(root.searchText)
root.searchText.trace_variable("w",lambda x,y,z: search(root)) #
Callback if stringvar is updated
root.bind("<Return>", lambda x: hideEntry(root,x))
root.bind("<Escape>", lambda x: hideEntry(root,x))
要扩展分支,可以调用tree.item(iid, open=True)
。
要滚动到搜索完成的地方,您可以使用tree.see(iid)
。
在您的 search
方法中结合两者:
def search(self, item=''):
search_pattern = str(self.searchText.get())
if len(search_pattern) < 3:
return
children = self.tree.get_children(item)
for child in children:
value_list = self.tree.item(child)["values"]
for i in range(len(value_list)):
if type(value_list[0]) != int:
if value_list[0].isprintable():
if value_list[0].lower().find(search_pattern.lower()) != -1:
self.tree.item(item,open=True)
self.tree.selection_set(child)
self.tree.see(child)
else:
res = search(self,item=child)
search(self,item=child)
您可以在 treeview here 上阅读文档。