2017-08-06 2 views
-1

J'ai écrit un plugin Qt pour QGIS, et à l'intérieur j'ai un QPushButton browse_btn pour rechercher un dossier de sortie. J'utilise la fonction QFileDialog.getExistingDirectory et tout fonctionne très bien. Cependant, si je ferme le plugin et l'ouvre à nouveau, alors cliquez sur le bouton pour ajouter un chemin, la fenêtre ouverte pour choisir le chemin s'ouvrira à nouveau après que j'ai choisi un chemin ou que je l'ai fermé. Si je ferme le plugin a ouvert à nouveau la fenêtre « Choisir le chemin » rouvrira ses portes trois fois et ainsi de suite ...QFileDialog ne cesse de rouvrir

Le problème similaire is still open here et in comments here et probablement solved here, mais comme il n'y a pas de code à condition que je ne peux pas l'appliquer pour résoudre mon problème.

Le code exact est le suivant:

self.dlg.browse_btn.clicked.connect(self.set_output) 

def set_output(self): 
    folder_path = str(QFileDialog.getExistingDirectory(self.dlg, u"Pick a folder")) 
    if not folder_path: 
     return None 

Je pense que cela se produit parce que chaque fois que j'open-close le plug-in de la connexion séparée est créée avec self.dlg.browse_btn.clicked.connect(self.set_output), et il se déconnecte seulement après que je RELANCE

QGIS
+1

Vous pouvez définir un indicateur booléen pour le connecter une seule fois ou exécuter le QFileDialog que si elle n'a pas couru jusqu'à présent. – JLev

+0

@JLev pourriez-vous s'il vous plaît fournir un exemple de code rapide? Je commence juste avec Qt – Vasily

+1

Pourquoi vous connectez le signal chaque fois qu'il est émis? Vous devez simplement connecter un tel signal quelque part qui est exécuté une fois (par exemple le constructeur du widget). – Mike

Répondre

1

Essayez ceci - Ajoutez un drapeau booléen isConnected à votre classe (ou dlg) et initez ce drapeau à false.

Ensuite, changez votre ligne de connexion à ce

if (!self.isConnected): 
    self.dlg.browse_btn.clicked.connect(self.set_output) 
    self.isConnected = true