Hi Frank, You should be able to suppress the single click deselect using an event filter. You create (or use an existing) QObject that will receive all events that are sent to the QObject that you install the event filter on, and from that, you define an `eventFilter(obj: QObject, event: QEvent) -> bool` method on that which will do the event filtering.
From that method, you can look at the events type, looking for `QEvent.MouseButtonPress` or `QEvent.MouseButtonRelease` (not sure which is actually triggering the unselect), and just return `True` from the event filter in those cases. All other cases, you just return the parent’s implementation of eventFilter, passing the same object and event. This way you achieve suppression of the mousePress and mouseRelease. (I tried my best to translate these to Python, but these might not be 100% correct). ~Keith From: PySide <pyside-boun...@qt-project.org> On Behalf Of Frank Rueter Sent: Friday, August 26, 2022 3:05 AM To: David Ching <d...@dcsoft.com> Cc: pyside@qt-project.org Subject: Re: [PySide] editing selected cells in QTabelWidget So I made some progress but am now having the problem that a right click on a persistent editor (combo box) will lose the current table selection. I tried reimplementing the mousePressEvent on both the editor widget and the actual table widget to stop that behaviour but to no avail. Here is a simplified version of the code that shows the problem: https://pastebin.com/M9RSTFSJ [cid:image001.png@01D8B937.5E6EA900] What I am trying to achieve is that a right click on the editor ithe "Type" column will keep the current row selection, so that I can then pop up the editor and apply the new value to all selected rows. What am I missing? Cheers, frank On Fri, Aug 26, 2022 at 7:58 AM Frank Rueter <fr...@ohufx.com<mailto:fr...@ohufx.com>> wrote: Thanks David, I was thinking about a right click option as a Plan B. Will do that. I will look into using a delegate as well. I had forgotten I could use those with the TableWidget as well. Thanks! Frank On Fri, Aug 26, 2022 at 4:52 AM David Ching <d...@dcsoft.com<mailto:d...@dcsoft.com>> wrote: > Date: Thu, 25 Aug 2022 20:36:01 +1200 > From: Frank Rueter <fr...@ohufx.com<mailto:fr...@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 reset. 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 setItemDelegate(m_delegate); } 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, David _______________________________________________ PySide mailing list PySide@qt-project.org<mailto:PySide@qt-project.org> https://lists.qt-project.org/listinfo/pyside
_______________________________________________ PySide mailing list PySide@qt-project.org https://lists.qt-project.org/listinfo/pyside