[PyQt] Editing multiple items in QTreeView delegate

James Polk jpolk5001 at yahoo.com
Wed Apr 6 18:34:24 BST 2011


Well I found a solution and thought I would share it...
Probably not the most elegant, but it does work..

Works by using an import global variable (told you it wasn't elegant ;-)

I created a file named "ms.py" and inside is a single line:

     MyTreeView

and that's all.

In my main.py,...I "import ms" at the top.  Later, I set the variable by...

     ms.MyTreeView = self.treeView

Then in my delegate file, delegate.py, I also add "import ms" at the top.
And then later, in the setModelData() function,  after checking selectionMode()
to make sure it's in multiSelect,...and after handling the "main" selection,I do a

      indices = ms.MyTreeView.selectedIndexes()

and loop thru them setting their value to the value of the main selection...

A side note,...when a treeView's selectionMode is set to 3 (Extended Selection),
one can pull a vertical pick from top to bottom, highlighting multiple items in a single
column.  Then, while holding down CTRL, you can double-click selection one item
out of this group.  This will pass this CTRL-selection to the delegate and remove its
index from the "indices" returned above.  Which is good, so you don't double-set
it's value.  When you hit "enter", the code will take the value of the CTRL-selection
and apply it to all the others who are still highlighted, making a nice clean sweep
and saving lots of keystrokes if you need to change a lot of items.

Cheers,
-Jim
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20110406/4559fadc/attachment.html>


More information about the PyQt mailing list