[PyQt] Signal on Selection in QTreeView

Matt Newell newellm at blur.com
Tue Mar 18 18:11:47 GMT 2008


On Tuesday 18 March 2008 10:52:20 Matt Newell wrote:
> On Tuesday 18 March 2008 09:46:06 fossks at cox.net wrote:
> > Phil/Andreas,
> >
> >      I've been experimenting again using some of the recommendations and
> > some examples I have found.   Please look at the new example I am working
> > with, which is below.
> >
> >     I can now have a reaction to a selected item in a list.  When
> > something is selected, the 'slot' function is called and is run.  Great! 
> >  In this case it prints out some details including the number of rows,
> > etc.
> >
> >     Now I am still trying to access a reference to the selected item so I
> > can pull the data from the original list and display it elsewhere in a
> > different widget.  The original author of this modified program included
> > a function call called "data".   However, I cannot figure out how to use
> > it. I guess my hangup is the index and role fields.  I don't know what to
> > put in those fields to get the currently selected item.
> >
> >     In my case I need the current row, that is the current row number.  I
> > don't need to fiddle around with the row entries as I already have them
> > in the original list.
> >
> >    Could someone help me write a simple function called
> > "get_current_row_number", which returns an integer indicating the
> > highlighted row?
> >
> > Kevin
>
> You just need to get the QModelIndexes from the QItemSelection 'selected'
> object in your slot, then call row() on them.
>
> The QItemSelection is a list of QItemSelectionRange objects.  Each
> QItemSelectionRange contains 1 or more selected QModelIndexes, represented
> from a topleft to bottom right with the same parent.
>
> >     def slot(self, selected, deselected):
>
> 	# this will give you an index for each row and col
> 	# so if you have multiple columns selected you will get duplicates
> 	for idx in selected.indexes():
> 		print idx.row()
> 	# Here is how to get the rows even if there are multiple columns selected
> 	# This ignores the indexes' parents, which is fine if your
> 	# model is 2 dimensional
> 	for selectionRange in selected:
> 		for i in
> range(selectionRange.topLeft().row(),selectionRange.bottomRight().row()):
> 			print "Row %i selected" % i
>

Sorry, that last part should be - 
		for i in range(selectionRange.top(),selectionRange.bottom() + 1):
			print "Row %i selected" % i


>
> Matt
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt




More information about the PyQt mailing list