class withWidgets(): ''' Todos Metodos aqui sao para o auxilio caso queria trabalhar com model com Mappers ''' def setMapper(self, model=None, fldToMap=None): """ Metodo para configurar o mapper ao modelo modelo = Modelo fldToMap = Campos para mappear """ self.mapper = QDataWidgetMapper()# cria objecto Mapper self.mapper.setModel(model) #Define modelo ao mapper for cidx, field in enumerate(fldToMap):#Para cada campo if field is not None: #Verdicacao self.mapper.addMapping(field, cidx)#Atribuimos ao mapping self.mapper.toFirst()#e movemos para o primeiro(obrigatorio) def mapperToNext(self): self.mapper.toNext()#Proxima linha def mapperToPerv(self): self.mapper.toPrevious()#Linha previa def getCurrentIndex(self): cIdx = self.mapper.currentIndex()#Get Current Index return cIdx def getValueFromMapper(self, pos=0): try: val = self.mapper.model().record(self.mapper.currentIndex()).value(0) #Get the value from the mapper row = self.mapper.currentIndex() #Get the current row or index except Exception: row = None val = None return val, row def sychClickWithMap(self,indexModel=None): self.mapper.setCurrentModelIndex(indexModel) #Scncy clicked object with mapper def setMapperToIdx(self, idx): self.mapper.setCurrentIndex(idx)#Set Current index to row or index
class ServerConfigurationEditor(QWidget): currentConfigChanged = pyqtSignal(object) saved = pyqtSignal() def __init__(self, connectionFactory, parent=None) -> None: super().__init__(parent) self._srv_list = ServerListWidget() self._srv_form = ServerConfigForm(connectionFactory) self._workflow = ServerFormWorkflow(self._srv_form) self._model = None layout = QVBoxLayout(self) layout.addWidget(self._srv_list) layout.addWidget(self._srv_form) def selectServer(self, serverId): self._srv_list.selectServer(serverId) def _selectedServer(self, idx): data = self._model.index(idx).data(role=Qt.EditRole) self.currentConfigChanged.emit(data) def currentServerId(self): return self._srv_list.currentServerId() def setModel(self, model): self._model = model self._srv_list.setModel(model) self._mapper = QDataWidgetMapper(self) self._mapper.setModel(model) self._mapper.setItemDelegate(ServerFormItemDelegate(self)) self._mapper.addMapping(self._srv_form, 1) self._mapper.currentIndexChanged.connect(self._workflow.restart) self._mapper.setCurrentIndex(self._srv_list.currentIndex()) self._mapper.setSubmitPolicy(QDataWidgetMapper.ManualSubmit) self._srv_form.saveBtn.clicked.connect(self._mapper.submit) self._srv_form.saveBtn.clicked.connect(self.saved) self._srv_list.currentIndexChanged.connect( self._mapper.setCurrentIndex) self._srv_list.currentIndexChanged.connect(self._selectedServer)
class withWidgets(): def setMapper(self, model=None, fldToMap=None): """ Metodo para configurar o mapper. """ self.mapper = QDataWidgetMapper() self.mapper.setModel(model) for cidx, field in enumerate(fldToMap): if field is not None: self.mapper.addMapping(field, cidx) self.mapper.toFirst() def mapperToNext(self): self.mapper.toNext() def mapperToPerv(self): self.mapper.toPrevious() def getCurrentIndex(self): cIdx = self.mapper.currentIndex() return cIdx def getValueFromMapper(self, pos=0): try: val = self.mapper.model().record( self.mapper.currentIndex()).value(0) row = self.mapper.currentIndex() except Exception: row = None val = None return val, row def sychClickWithMap(self, indexModel=None): self.mapper.setCurrentModelIndex(indexModel) def setMapperToIdx(self, idx): self.mapper.setCurrentIndex(idx)
class SimpleModel(): def __init__(self, dbcon=None, tblName=None, dictField=None): super(SimpleModel, self).__init__() self.tblName = tblName self.dicFields = dictField def setModel(self): ''' Metodo para Configurar o SQLTABLEMODEL, para uma determina tabela na base de dados caso se a configuracao seja bem feita e devolvido um true e caso contrario e devolvido um False e a mensagem de erro. ''' bOK = False self.model = QSqlTableModel() self.model.setTable(self.tblName) self.model.sort(0, Qt.AscendingOrder) bOK = self.model.select() if bOK: return bOK else: msg.error(txt='Error Nao Foi possivel Configurar o model', verbTxt=self.model.lastError().text()) return bOK def setModelInView(self, tblView=None): ''' Metodo para atribuir um Modelo a table View ''' tblView.setModel(self.model) def setMapper(self): ''' Metodo para configuara o mappper, onde iremos atribuir ao mapper um model e widgets para podermos mapper a informacao no modelo, mudaremos o tipo de submitPocalicy para manual para que so se atualize os campos com clickar do um botao atualizar ''' self.mapper = QDataWidgetMapper() self.mapper.setModel(self.model) for idx, val in enumerate(self.dicFields['fldWidget']): self.mapper.addMapping( val, self.model.fieldIndex(self.dicFields['fldName'][idx])) self.mapper.setSubmitPolicy(self.mapper.ManualSubmit) self.mapper.toFirst() def setTblMapper(self, indexModel=None): ''' Metodo para scronizar o click do TableView com os dados do mapper isto e para quando se selecionar um elemento na tabela, ser esse que ira aparecer no widgets mapeados. ''' currentModel = indexModel.model() clickedRow = indexModel.row() self.mapper.setCurrentModelIndex(indexModel) for i in range(len(self.dicFields['fldName'])): currentModel.index(clickedRow, i) def addData(self): ''' Metodo para prepara a modelo e mapper para inserir um novo elemento. ''' row = self.model.rowCount() bOK = self.model.insertRow(row) self.mapper.setCurrentIndex(row) if bOK: return bOK else: msg.error( txt= 'Error Nao Foi possivel Configurar o model para a insercao de um novo elemento.', verbTxt=self.model.lastError().text()) return bOK def insertData(self, lstVal): ''' Metodo para inserir novos dados na base de dados, primeiro configura os tipos de compos depois leva os valores da lista de valores e por fim executa e se a insercao for bem succedida e envida retorna verdade caso contrario retorn falso e menssagem com erro ''' insertRecord = QSqlRecord() for idx, val in enumerate(self.dicFields['fldName']): insertRecord.append(QSqlField(val, self.dicFields['fldType'][idx])) for indx, val in enumerate(lstVal): insertRecord.setValue(indx, val) bOK = self.model.insertRowIntoTable(insertRecord) if bOK: msg.inserted() self.model.select() return bOK else: msg.error(txt='Error Nao Foi possivel Inserir o novo elemento.', verbTxt=self.model.lastError().text()) return bOK def saveChange(self): ''' Metodo para Atulizar os dados editados, caso or bem succedida e envida retorna verdade caso contrario retorn falso e menssagem com erro ''' bOK = self.mapper.submit() if bOK: msg.updated(txt='Dados Atulizados Com sucessos') self.model.select() return bOK else: msg.error(txt='Error Nao Foi possivel Atualizar o elemento .', verbTxt=self.model.lastError().text()) return bOK