Как заблокировать прокси при редактировании данных в QTableView - PullRequest
0 голосов
/ 18 января 2019

Я создаю QTableView с пользовательским QSortFilterProxyModel, приведенный ниже код является простейшим примером.

class SortFilterProxyModel(QSortFilterProxyModel):
    def __init__(self, parent=None, dateCol=0):
        super(QSortFilterProxyModel,self).__init__(parent)
        self.filters = {}
    def setFilterByColumn(self, regex, column):
        self.filters[column] = regex
        self.invalidateFilter()
    def filterAcceptsRow(self, source_row, source_parent):
        for key, regex in self.filters.items():
            ix = self.sourceModel().index(source_row, key, source_parent)
            if ix.isValid():
                text = self.sourceModel().data(ix)
                result=regex.pattern().split('|')
                if not text in result:
                    return False
        return True

class MainWindow(QMainWindow, Ui_MainWindow):    
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.model=QSqlTableModel(self)            
        self.model.setTable('table1')            
        self.model.setEditStrategy(QSqlTableModel.OnFieldChange)            
        self.model.select()            
        self.proxyModel=SortFilterProxyModel(self)            
        self.proxyModel.setSourceModel(self.model)
        self.tableView=QTableView(self)
        self.tableView.setModel(self.proxyModel)
        self.proxyList=['term1','term2','term3']
        self.proxyCol=3
        self.proxyModel.setFilterByColumn(QRegExp('|'.join(self.proxyList), Qt.CaseInsensitive, QRegExp.RegExp),self.proxyCol)
        self.proxyModel.sort(self.proxyCol, Qt.AscendingOrder)

Данные self.tableView можно отфильтровать, установив self.proxyList, и можно отсортировать, вызвав метод QSortFilterProxyModel.sort (). Теперь в таблице будут показаны данные, чьи данные в 3-м столбце представляют собой строки «term1», «term2», «term3», а строки «term1» будут перечислены вверху.

Моя проблема в том, что когда я редактирую данные в таблице, например, меняю «term1» на «term4», тогда отредактированная строка будет скрыта, если я изменю «term1» на «term3», то эта строка будут перечислены в нижней части. То есть, когда данные изменились, прокси-сервер (ограничительное условие) будет повторно применен.

Есть ли способ заблокировать прокси при редактировании данных таблицы, как в Excel?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...