Co próbuję zrobić, to dynamicznie zmieniać (przez filtr) listę ciągów. W moim przypadku jest to lista plików ze ścieżkami zapisanymi w gtk.TreeStore
.PyGtk Jak zmienić dane TreeView za pomocą filtra?
Przykład oczekiwanego efektu (Np. Szukając Sublime Text 2 plik Ctrl + P):
danych:
Lista plików (TreeView):
- „/ home/user/'
- ' .bashrc ',
- 'test.txt'
- ...
Działanie: W polu filtra (widget Entry) użytkownik rozpoczyna wpisywanie. Po pierwszym znaku np. lista 't' powinna być aktualizowana tak:
Wynik:
Lista plików (katalogów):
- 'test.txt',
- ... wszystkie ciągi zawierające „t "(dopasowanie funkcja nie jest ważne teraz)
Co mam już:
self.search_entry = gtk.Entry()
self.tree_store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_BOOLEAN)
for node, files in self.files_list:
parent = self.tree_store.append(None, [node, True])
for f in files:
self.tree_store.append(parent, [f, True])
tree_filter = self.tree_store.filter_new()
self.treeview = gtk.TreeView(tree_filter)
self.renderer0 = gtk.CellRendererText()
self.treeview.insert_column_with_attributes(-1, "Filename", self.renderer0, text=0)
self.treeview.set_search_column(0)
self.treeview.set_search_entry(self.search_entry)
self.treeview.expand_all()
Wiem, że TreeView ma metodę set_search_equal_func
, w której mogę zmienić domyślną funkcję dopasowywania na własną. Problem polega na tym, w jaki sposób mogę zmienić listę podczas pisania w polu formularza filtru?
+1, to jest naprawdę pomocne. dziękuję! – Sardathrion