banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

State Of The Map 2024

#1 Fri 24 September 2021 12:38

tnicolas
Participant actif
Date d'inscription: 18 Apr 2007
Messages: 63

QGIS 3.16: fermeture de formulaire non souhaitee

Bonjour,

Pour un plugin j'ai créé des formulaires (QDialog) avec QtDesigner qui fonctionnent correctement sauf pour le dernier et je ne sais pas pourquoi. J'arrive à l'ouvrir mais il se ferme tout seul dans la foulée sans message d'erreur dans QGis.

Voici le code de mon __init__.py qui s'y rapporte

Code:

from .fexporterxl import MonDialogExporterxl

class BTI:
    def initGui(self):
        self.btn_export = QAction(QIcon(f'{folder}/logo/excel.png'),'Export Excel', self.iface.mainWindow())
        self.btn_export.triggered.connect(self.exportxl)        
        self.iface.addPluginToMenu('Base', self.btn_export)
    def exportxl(self):
        #choix des données à exporter
        leform = False
        for form in QApplication.allWidgets():
            if form.windowTitle()[:8] == "Exporter":
                leform = True
                if form.isVisible() == False:
                    form.show()
                break
        if leform == False:
            form = MonDialogExporterxl()
            form.show()

Voici le code du fexporterxl.py

Code:

from qgis.core import Qgis
from PyQt5.QtWidgets import QDialog, QPushButton, QPlainTextEdit, QCheckBox, QComboBox, QLineEdit, QDateEdit
from PyQt5.QtCore import Qt
from qgis.PyQt import uic
from pathlib import Path

from .general import *

folder = Path(__file__).resolve().parent
ui_file = folder.joinpath('f_exporterxl.ui')
ui_class, _ = uic.loadUiType(ui_file)

class MonDialogExporterxl(ui_class, QDialog):
    
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        
        self.findChild(QPushButton,"btn_ok").clicked.connect(self.exporter)
        couleur(self, self.findChild(QPushButton,"btn_ok"), "vert")
    
    def exporter(self):
        print("test")

Ce que j'ai testé :
- recréer plusieurs formulaires de zéro en testant différents noms => se sont tous fermés tout seul
- copier un formulaire existant et fonctionnel puis le renommer => se ferme tout seul
- dans "def exportxl" appeler un formulaire fonctionnel => reste ouvert

J'en conclu que mon code est bon et que le problème vient bien du formulaire mais je ne vois pas pourquoi. J'ai réduit le formulaire au strict minimum (juste un bouton) mais ça ne change rien. Dans QtDesigner J'ai comparé les propriétés d'un formulaire fonctionnel avec celui qui se ferme et rien ne change mis à part ObjectName et WindowsTitle.

Le formulaire qui se ferme est le seul du plugin à ne pas être rattaché à une couche shape, csv ou autre. Est ce que ça pourrait venir de là ?

Cordialement,

Hors ligne

 

#2 Fri 24 September 2021 13:56

tnicolas
Participant actif
Date d'inscription: 18 Apr 2007
Messages: 63

Re: QGIS 3.16: fermeture de formulaire non souhaitee

Problème résolu j'ai remplacé

Code:

form.show()

par

Code:

form.exec_()

Dernière modification par tnicolas (Fri 24 September 2021 13:56)

Hors ligne

 

Pied de page des forums

Powered by FluxBB