I have a function that draws a bunch of widgets and takes longer than
expected to run; when I profile it I find the bottleneck is in
gtk.ComboBox.set_active(). The set_active() method takes 0.364 seconds
to run, while the rest of the function takes 0.012 seconds. I don't see
why set_active should take so long; it doesn't take that long to pick an
item from the list in the GUI. Incidentally, there are 28 items in the
ComboBox's model. Is there something I can do to make the set_active()
call go faster?
Here's my cProfile output:
191413 function calls (188937 primitive calls) in 0.769 CPU
seconds
Ordered by: cumulative time
List reduced from 622 to 10 due to restriction <10>
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.769 0.769 <string>:1(<module>)
1 0.000 0.000 0.769 0.769
sqlvis.py:316(switch_figure)
1 0.012 0.012 0.745
0.745 /home/jhaiduce/sqlvis/general2/plot.py:195(show_settings_widgets)
2 0.000 0.000 0.729 0.364 {method 'set_active' of
'gtk.ComboBox' objects}
2 0.000 0.000 0.728
0.364 /home/jhaiduce/sqlvis/general2/plot.py:257(on_column_combo_changed)
2 0.000 0.000 0.728
0.364 /home/jhaiduce/sqlvis/general2/eventManager.py:56(Post)
4 0.000 0.000 0.673
0.168 /home/jhaiduce/sqlvis/general2/plot.py:58(Notify)
2 0.001 0.001 0.672
0.336 /home/jhaiduce/sqlvis/general2/plot.py:70(refresh)
2 0.000 0.000 0.262
0.131 /usr/lib/pymodules/python2.6/matplotlib/backends/backend_gtk.py:280(draw)
2 0.000 0.000 0.261 0.131 {method 'process_updates'
of 'gtk.gdk.Window' objects}
And a portion of the code from the function:
for i in range(2):
label=gtk.Label(labels[i])
table.attach(label,0,1,i,i
+1,xoptions=gtk.FILL,yoptions=gtk.FILL)
label.show()
field=gtk.ComboBox(liststore)
cell = gtk.CellRendererText()
field.pack_start(cell, True)
field.add_attribute(cell, 'text', 0)
field.connect('changed',self.on_column_combo_changed,axes[i])
if i==0:
field.set_active(self.xcolumn)
if i==1:
field.set_active(self.ycolumn)
table.attach(field,1,2,i,i+1,yoptions=gtk.FILL)
field.show()
_______________________________________________
pygtk mailing list [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/