gustavowillam / SmartMapPlugin

Plugin Qgis3.10.x para interpolação utilizando Krigagem Ordinária (OK), Machine Learning (ML) e Geração de Zonas de Manejo
https://github.com/gustavowillam/SmartMapPlugin
GNU General Public License v3.0
51 stars 13 forks source link

TypeError: disconnect() failed between 'valueChanged' and all its connections #62

Closed franciscocamellon closed 3 months ago

franciscocamellon commented 6 months ago

TypeError: disconnect() failed between 'valueChanged' and all its connections Traceback (most recent call last): File "C:\Users/Francisco/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\lallemand_plant_care\gui\kriging\kriging_dlg.py", line 124, in runSmartMap self.smartMap.pushButton_ImportQGIS_clicked() File "C:\Users/Francisco/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\Smart_Map\Smart_Map.py", line 1462, in pushButton_ImportQGIS_clicked self.reset_gui() File "C:\Users/Francisco/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\Smart_Map\Smart_Map.py", line 722, in reset_gui self.dlg.horizontalSlider_Nugget.valueChanged.disconnect() TypeError: disconnect() failed between 'valueChanged' and all its connections

Python version: 3.9.5 (tags/v3.9.5:0a7dcbd, May 3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] QGIS version: 3.22.12-Białowieża Białowieża, b8534cb1

Olá Prof @gustavowillam, primeiramente gostaria de parabenizá-lo pelo excelente plugin desenvolvido! Estou desenvolvendo uma aplicação que usa seu plugin no background e vi que o erro acima é recorrente nos issues aqui e gostaria de dar minha contribuição para ajudar na correção dele.

Este erro geralmente ocorre ao tentar desconectar um sinal que não possui conexões ou quando a conexão específica que está sendo desconectada não existe, como são os casos nas linhas abaixo: https://github.com/gustavowillam/SmartMapPlugin/blob/23e54a26ad4a0ac1ba41cf3548e0999565b068fe/Smart_Map.py#L1590

uma sugestão seria trocar o comboBox_VTarget que é um QComboBox por um QgsFieldComboBox daí vc fica livre dos problemas de manipulação de sinais entre o QgsMapLayerComboBox e QgsFieldComboBox.

Já no método self.reset_gui() é mesmo necessário disconectar os sinais dos slots todas as vezes que usá-lo? Por exemplo, reset_gui() é usado na inicialização do plugin, nesta hora o método disconecta a widget self.dlg.horizontalSlider_Nugget mas esta widget só terá um slot conectado quando o usuário chegar à tab de interpolação (tabWidget_Interpolacao), isso é possivelmente uma fonte deste erro https://github.com/gustavowillam/SmartMapPlugin/blob/23e54a26ad4a0ac1ba41cf3548e0999565b068fe/Smart_Map.py#L676

Caso seja realmente necessário manter as disconexões dos slots, minha sugestão é de que o método reset_gui() seja dividido em métodos menores cada um responsável por resetar uma TabWidget específica, pois nesse caso haverão slots conectados. Espero ter ajudado e gostaria de me colocar à disposição para contribuir no desenvolvimento deste plugin.

gustavowillam commented 6 months ago

Olá @franciscocamellon, muito obrigado pelas contribuições. Vou analisá-las, e implementá-las no plugin. Muito obrigado!