[PyQt] Signal on Selection in QTreeView
Matt Newell
newellm at blur.com
Tue Mar 18 17:52:20 GMT 2008
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
Matt
More information about the PyQt
mailing list