Mais

Enviar sinal quando atributos modificados - QGIS 2.6

Enviar sinal quando atributos modificados - QGIS 2.6


Para um plugin python QGIS 2.6, estou tentando enviar um sinal quando um valor de atributo é alterado (valores para um recurso existente são atualizados ou adicionados e o diálogo do formulário de atributo é aceito). Este sinal deve então se conectar a outra função. Observe que o recurso não está sendo adicionado (ele já existia e os atributos estão sendo modificados após a identificação de um recurso no modo de edição). É por isso querecurso adicionadosinal não funciona.

Até agora, tentei usarattributeValueChanged,editCommandEndedelayerModifiedsinais da classe da camada vetorial dessa forma, sem sucesso.

def myFunction (self): self.myLayer.attributeValueChanged.connect (self.myOtherFunction) def myOtherFunction (self): self.myLayer.dostuff self.dlg.show ()

Eu testei oattributeValueChangedSIGNAL em um plugin de teste criado do zero usando QGIS v.2.6.1

Você pode conectar o SIGNAL ao seu slot desta forma (eu fiz isso no meucorre()método):

def run (self): self.lyr = self.iface.mapCanvas (). layers () [0] self.lyr.attributeValueChanged.connect (self.mySlot)

E então, você tem duas opções para escrever seu slot (vejamySlotemySlot2):

def mySlot (self): QMessageBox.information (self.iface.mainWindow (), "Teste", "Atributos foram alterados !!!", QMessageBox.Ok) def mySlot2 (self, fid, idx, v): QMessageBox.information (self.iface.mainWindow (), "Teste", "Atributos alterados para o recurso" + str (fid), QMessageBox.Ok)

Ambos os slots funcionam, basta substituirself.mySlotdeself.mySlot2no método de conexão acima se desejar alternar entre eles.

Se você deseja obter o plugin de teste, execute-o em seu QGIS e dê uma olhada no código, você pode acessá-lo aqui. Você encontra as instruções de instalação e uso no arquivo README.


Portanto, o evento que funciona é attributeValueChanged. Eu simplesmente precisava adicionar alguns argumentos à minha função, conforme mencionado por outro usuário. Isso funciona agora:

def myFunction (self): self.myLayer.attributeValueChanged.connect (self.myOtherFunction) def myOtherFunction (self, fid, idx): self.myLayer.dostuff self.dlg.show ()

Assista o vídeo: Wtyczka QGIS Attachments