[PySide] editing selected cells in QTabelWidget

David Ching dc at dcsoft.com
Thu Aug 25 18:51:14 CEST 2022

> Date: Thu, 25 Aug 2022 20:36:01 +1200
> From: Frank Rueter <frank at ohufx.com>
> Subject: [PySide] editing selected cells in QTabelWidget
> Hi all,
> I have a simple table which will never hold much data, so I opted for
QTabelWidget rather than QTabelView.
> Two columns have combo boxes set as cell widgets; all other cells house
straight up strings.
> I have set the selection behaviour to QAbstractItemView.SelectRows and am
now trying to figure out how to enable
>  editing of selected cells, so that the user can select multiple rows,
then double click a cell in that selection and edit it,
>  which will cause all other cells in the same column within the selection
to receive the new value.
> I have hit a couple of issues:
>  1. By default the selection is reset when I double click in a cell, so I
   assume I will have to override QTableWidget.mousePressEvent() to prevent
   that somehow. Any suggestions on how to best manage that best? I am not
   sure what I need to re-implement to just prevent the selection being

In general, double clicking on a multiple selection doesn't work since as
you note, the first click (of the double click) selects the single item that
was clicked and de-selects the other items.  To edit multiple selected items
(my app runs on Windows) I select them and then start editing by pressing F2
(which Excel uses similarly) or a toolbar button, or right-clicking one of
the selected items which opens a context menu with an Edit item.

>   2. the cell widgets do not modify the actual cell item's value. Do I
>    need to manually connect the widgets to a slot that will do that or is
>    there a better way to do that?

I had a similar task:

MyTableWidget::MyTableWidget(QWidget *parent) : QTableWidget(parent)
    m_delegate = new MyTableItemDelegate();  // MyTableItemDelegate is
derived from QStyledItemDelegate

MyTableItemDelegate overrides createEditor(), setEditorData(),
setModelData(), updateEditorGeometry().

Apologies, this code is in C++.  It has been years since I developed this
code, so don't know more details off the top of my head.

Hope this helps,

More information about the PySide mailing list