[PySide] Form dialog subclassing QDialog

Jérôme jerome at jolimont.fr
Wed Mar 26 18:08:43 CET 2014


Le 2014-03-26 16:49, Jérôme a écrit :

> Thanks for any advice. The more I think of it, the mode it seems that
> the only way is to add a (hidden or not) ID column.

I just did this.

            # Get selected items. If none, exit.
            selected = self.tableView.selectedIndexes()
            
            # Get selected row in model from selection in proxy
            # (Note: all elements are on the same row, 
            # thanks to
setSelectionBehavior(QAbstractItemView.SelectRows)
            selected_row =
self.proxy_model.mapToSource(selected[0]).row()

            # Get ID of item corresponding to selected row (ID is column
0)
            ID = self.model.item(selected_row, 0).text()

            # Get corresponding index in model.items list
            index = self.model.findIndex(ID)

findIndex is a method of my model:

    def findIndex(self, ID):
        ID_list = [item.ID for item in self._items]
        if ID not in ID_list:
            return None
        return ID_list.index(ID)

and now, I'm realizing that the order of the row was not messed up, just
modified by the proxying.

The quick solution was to just write

            index = self.proxy_model.mapToSource(selected[0]).row()

instead of

            index = selected[0].row()

...

I guess... I've learned something today (TM) [1].

Thanks for reading anyway.

> Overall, I think my problems are due to the fact that I don't rely
> solely on Qt's Model/View architecture: I keep the data in this
> self.persons attribute list.
> 
> As we said in another message in this thread, these lists could be
> removed and the data could be kept only in QStandardItem instances, but
> then I'd need to be able to store everything in this form, even data
> that I don't know how and don't want to display in views. My approach is
> different, I store everything in python classes, and when I need a user
> interaction, I set a model to display what I want to display, and this
> only, and I trash that model when I'm done.

Perhaps I should use a TreeModel to fit all the data but for now I'll
stick to this approach.

[1] http://www.cs.berkeley.edu/~smaji/southpark.html

-- 
Jérôme




More information about the PySide mailing list