Hi List, hi Zyphos, cooool. Detaching the model from the treeview already speeded up things from 50 seconds to unbelievable 20 seconds! I will also take a look at the other hint.
Thanks a lot and kind regards Cornelius Am 13.07.2010 15:35, schrieb Zyphos: > Hi, > a solution is written into the FAQ: > http://faq.pygtk.org/index.py?req=show&file=faq13.043.htp > > treeview.freeze_child_notify() > treeview.set_model(None) > > # Add rows to the model > # ... > > treeview.set_model(model) > treeview.thaw_child_notify() > > Regards, > > Zyphos > > > Tim Evans a écrit : > >> On 2010-07-13 3:48, Cornelius Kölbel wrote: >> >> >>> Dear list, >>> >>> I got an array of dictionaries, that I want to add to a GTKListStore, >>> that is displayed an a treeview. >>> >>> This is very slow. I already replaced the liststore.append by >>> liststore.insert, which is much much faster. >>> But still, filling the 10.000 values takes about 50 seconds. >>> >>> Is there any cool mapping function, to push the array to the liststore? >>> I used a for loop to iterate over the array... >>> I also tried while an to pop the array elements... >>> >>> It is something like this: >>> >>> data: array of dictionaries >>> >>> data = array( { 'v1' : 'something', 'v2': 'something else' } , >>> { 'v1' : 'another', 'v2': 'something completely diff' } >>> ) >>> >>> >>> for d in data: >>> self.liststore.insert( 0, ( d.get("v1"), d.get("v2") ....)) >>> >>> >>> ...is there a better way than doing a for loop? >>> ...or a way to not have to interate over the 10.000 dicts? >>> >>> ...or is there a cool reading on performance tuning pyton? >>> >>> >> Some general ideas: >> - Make sure the store isn't being viewed when you insert data, that >> will slow it down. >> >> - Do attribute lookups outside big loops: >> >> append = self.liststore.append >> get = d.get >> for d in data: >> append(0, (get('v1'), get('v2'), ...)) >> >> - Put the treeview into fixed height and width mode. Automatic sizing >> is the enemy of treeview performance. This only works if all your >> rows are the same height. The function calls you need are: >> gtk.TreeViewColumn.set_sizing >> with the gtk.TREE_VIEW_COLUMN_FIXED value >> gtk.TreeViewColumn.set_fixed_width >> gtk.TreeView.set_fixed_height_mode >> >> - If your list is large enough it may be worth subclassing >> gtk.TreeModel and overriding the required methods. It's complex, but >> it can avoid referencing all your data at tree build time, instead >> loading as the user scrolls. >> >> - Write it in C. Always valid, even if as a last resort. >> >> >> > _______________________________________________ > pygtk mailing list pygtk@daa.com.au > http://www.daa.com.au/mailman/listinfo/pygtk > Read the PyGTK FAQ: http://faq.pygtk.org/ >
signature.asc
Description: OpenPGP digital signature
_______________________________________________ pygtk mailing list pygtk@daa.com.au http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://faq.pygtk.org/