GTK + 3.0: Jak używać Gtk.TreeStore z niestandardowymi elementami modelu?
Próbuję opracować aplikację GTK w Pythonie i naprawdę utknąłem z poprawnym użyciem agtk.TreeStore
. Mój główny problem: już przeanalizowałem JSON i mam własną strukturę danych, która jest zasadniczo listą Pythona i dwoma rodzajami obiektów: jeden reprezentuje zbiór elementów (kolekcje nie mogą być zagnieżdżane) i jeden do reprezentowania przedmiotów ( które mogą pojawić się zarówno na liście, jak iw kolekcji).
Znam już podstawowe użycie aTreeStore
i udało się uzyskać poprawnie renderowane elementy na ekranie. Nie wiem, jak sobie poradzić z faktem, że treestore jest zdolny tylko do przechowywania typów gobjectów (w tym momencie nie jestem pewien, ponieważ nie wiem zbyt wiele o systemie typu gobject). Dokumentacja dla C zawiera następujące (oprócz PixBuf) podstawowe typy, które można wstawiać i są automatycznie mapowane na typy danych Pythona:
Na przykład gtk_tree_store_new (3, G_TYPE_INT, G_TYPE_STRING, GDK_TYPE_PIXBUF); utworzy nowy GtkTreeStore z trzema kolumnami, odpowiednio typu int, string i GdkPixbuf.
Ponadto mówi, że możesz wstawić dowolneGType
. Link z dokumentacji bezpośrednio wskazuje na ten akapit:
Wartość liczbowa reprezentująca unikalny identyfikator zarejestrowanego typu.
Moje badania tematu kończą się tutaj, a Google znajduje głównie samouczki GTK 2.x i nic o wstawianiu innych typów danych z wyjątkiemstr
iint
itp.
Pytania:
Czy można zaimplementować nowy GType (lub jakikolwiek inny interfejs, który umożliwi wstawianie niestandardowych danych w treestore) i jak to zrobić?
Już próbowałem wyprowadzićGObject
ale to nie pomogło.
Jak pozbyć się utrzymywania dwóch struktur danych w tym samym czasie?
Mianowicie mój wynik analizowania i duplikaty informacji w Treestore.
Jak można radzić sobie z treściami mieszanymi?
W moim przypadku mam kolekcje i przedmioty z różnymi dodatkowymi informacjami (które są odzwierciedlane w widoku drzewa jako węzły z dziećmi lub bez nich).
Jeśli powyższe pytania zostaną rozwiązane, pozbędę się także problemu podczas obsługi selekcji: trudno jest dopasować prosty typ jakstr
lubint
aby dopasować element, który wstawiłem wcześniej. Taki atrybut musi być kluczem i nadal trzeba przeszukiwać listę z analizowanymi wynikami, które są nieskuteczne.
Z góry dziękuję!
Dodatkowe informacje niezwiązane bezpośrednio z pytaniem:
Myślałem, że wdrożenie zwyczaju może być wykonalnym wyzwaniemTreeModel
aż przeczytam to wsamouczek dla GTK 2:
Jednak wszystko to kosztuje: jesteśmało prawdopodobne, aby napisał użyteczny model niestandardowy w mniej niż tysiącu linii, chyba że usuniesz wszystkie znaki nowej linii. Pisanie niestandardowego modelu nie jest jednak tak trudne, jak mogłoby się wydawać, i może być warte wysiłku, nie tylko dlatego, że spowoduje to dużo zdrowszy kod, jeśli masz dużo danych do śledzenia.
Czy to nadal obowiązuje?
Właśnie się natknąłemhttp://www.pygtk.org/articles/subclassing-gobject/sub-classing-gobject-in-python.htm Czy to może być pomocne? Wiele zasobów jest przeznaczonych dla PyGTK 2.0. przestarzałe.