Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get and set the active row in QTreeview programmatically (PyQt)

Is there a way to get and change the active row in a QTreeView (not QTreeWidget)? By active, I mean the row with the focus highlight, not the selected row. In the paint event, I can use QStyle.State_HasFocus to get the active row, but this doesn't seem to work elsewhere.

like image 996
D K Avatar asked Sep 18 '11 14:09

D K


2 Answers

You can get/set the active row with the currentIndex() and setCurrentIndex() functions that you can find in both QTreeView and QItemSelectionModel (the latter is returned by QTreeView.selectionModel()).

And despite its name, the QItemSelectionModel handles the view current item, and the view selection independently.

like image 151
alexisdm Avatar answered Oct 05 '22 22:10

alexisdm


Current item is the one which is indicated by the focus rectangle. You can change it using selectionModel function of the tree view. If you don't want to change currently selected items, pass QtGui.QItemSelectionModel.NoUpdate as a second parameter to setCurrentIndex method. Below is an example:

index = model.index(3, 0);
view.selectionModel().setCurrentIndex(index, QtGui.QItemSelectionModel.NoUpdate)

this should move current item to the item with index 3

hope this helps, regards

like image 21
serge_gubenko Avatar answered Oct 05 '22 22:10

serge_gubenko