IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Fermer des fenêtres


Sujet :

PyQt Python

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut Fermer des fenêtres
    Bonjour,

    Je suis sous python 2,7 et pyQt4. Je devellope un pulgin qui possède plusieurs fenêtres. Mon problème est que une fois les fenêtre ouvertent, je n'arrive pas à les faires se fermer automatiquement lors de evenement de type clique sur un bouton ou double clique sur un widget. Je n'ai surement pas bien saisie le principe du self.close(), ni du closeEvent.

    Quelqu'un pourrait t'il m'éclairer sur ce sujet ?

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut, je suppose que tes fenêtres sont des QDialog.

    Le fenêtres de dialogue peuvent être fermées de différentes façons.

    QDialog.reject() >> ferme la fenêtre et retourne 0
    QDialog.accept() >> ferme la fenêtre et retourne 1
    QDialog.done(int) >> ferme la fenêtre et retourne l'entier en argument
    click sur la croix de fermeture >> ferme la fenêtre et retourne 0 sous Linux

    Donc, imaginons un dialogue demandant à l'utilisateur de choisir entre une option par défaut, une option personnalisée ou un abandon de l'opération avec:
    un bouton OK > option par défaut
    un bouton Custom > option personnalisée (par exemple "5")
    un bouton Cancel > annulation de l'opération

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def on_button_ok_clicked(self):
        self.accept()
    def on_button_custom_clicked(self):
        self.done(5)
    def on_button_cancel_clicked(self):
        self.reject()
    Cela répond-t-il à la question ?

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Mes fenêtres sont bien des QDialog crée via QDesigner (Dialog without Buttons). Question comment le savoir via le code ? J'ai réussi à faire fermer ma fenêtre via cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL(_fromUtf8("doubleClicked(QModelIndex)")), uiSrid.close)
    J'ai essayé avec un QDialog.accept(), en créant une nouvelle fonction comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL(_fromUtf8("doubleClicked(QModelIndex)")),self.doubleClick)
     
        def doubleClick (self):
            self.accept()
    Mais j'ai ce message : ´AttributeError: 'Ui_uiSrid' object has no attribute 'accept'
    Ma class étant défini comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class Ui_uiSrid(QtGui.QMainWindow):

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Ben non, seul le QDialog a une méthode accept().

    Si tu crées un dialogue avec Qt Designer et que tu ne veux pas toucher au code tu peux malgrès tout connecter le signal lors de l'instanciation du dialogue. Mais pas de la façon dont tu le fais.

    De quelle manière veux-tu que le dialogue soit fermé par l'utilisateur ? click sur un bouton ? suite à une action quelconque sur un widget du dialogue ?

    L'histoire du double-click dans un QTableWidget, je la sens pas bien par contre. Ta QTableWidget est bien dans le QDialog, on est bien d'accord ?

    Comment le QDialog est-il appelé ? dans une fonction ?

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    De quelle manière veux-tu que le dialogue soit fermé par l'utilisateur ?
    Le sénario que j'aimerais est le suivant :
    1.L'utilisateur ouvre la fenêtre2 (avec le QtableWidget) en cliquant sur un bouton de la fenetre1
    2.Il selectionne une ligne du tableau en doucle cliquant dessus
    3.L'appli récupère la selection
    4.L'appli ferme automatiquement la fenetre après le double clique
    5.La selection est afficher dans la fenetre2 dans un QlineEdit

    Les points 1,2 et 3 sont ok, le point 4 est pas super optimal d'où mon message et le 5 est en court car j'ai des soucies de passage d'argument entre mes classes.

    Comment le QDialog est-il appelé ? dans une fonction ?
    Le QDialogue est appelé lorsque je clique sur le bouton via une méthode (uiSrid cf code)

    Pour aide mon code :
    fenêtre 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    class Ui_Download(QtGui.QMainWindow):
     
        def setupUi(self, Ui_Download, Main):
            Ui_Download.setObjectName(_fromUtf8("Ui_Download"))
            Ui_Download.resize(651, 251)
            self.gridLayoutWidget = QtGui.QWidget(Ui_Download)
            self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 10, 631, 231))
            self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
            self.gridLayout = QtGui.QGridLayout(self.gridLayoutWidget)
            self.gridLayout.setMargin(0)
            self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
            self.label_titre = QtGui.QLabel(self.gridLayoutWidget)
            font = QtGui.QFont()
            font.setFamily(_fromUtf8("Calibri"))
            font.setPointSize(12)
            font.setBold(True)
            font.setWeight(75)
            self.label_titre.setFont(font)
            self.label_titre.setObjectName(_fromUtf8("label_titre"))
            self.gridLayout.addWidget(self.label_titre, 0, 0, 1, 1)
            self.lineEdit_srid = QtGui.QLineEdit(self.gridLayoutWidget)
            self.lineEdit_srid.setObjectName(_fromUtf8("lineEdit_srid"))
            self.gridLayout.addWidget(self.lineEdit_srid, 4, 1, 1, 1)
            self.pushButton_Browse = QtGui.QPushButton(self.gridLayoutWidget)
            self.pushButton_Browse.setObjectName(_fromUtf8("pushButton_Browse"))
            self.gridLayout.addWidget(self.pushButton_Browse, 2, 0, 1, 1)
            self.pushButton_srid = QtGui.QPushButton(self.gridLayoutWidget)
            self.pushButton_srid.setObjectName(_fromUtf8("pushButton_srid"))
            self.gridLayout.addWidget(self.pushButton_srid, 4, 0, 1, 1)
            self.pushButton_Import = QtGui.QPushButton(self.gridLayoutWidget)
            self.pushButton_Import.setObjectName(_fromUtf8("pushButton_Import"))
            self.gridLayout.addWidget(self.pushButton_Import, 6, 1, 1, 1)
            self.lineEdit_pathfile = QtGui.QLineEdit(self.gridLayoutWidget)
            self.lineEdit_pathfile.setObjectName(_fromUtf8("lineEdit_pathfile"))
            self.gridLayout.addWidget(self.lineEdit_pathfile, 2, 1, 1, 1)
            self.label_file = QtGui.QLabel(self.gridLayoutWidget)
            self.label_file.setObjectName(_fromUtf8("label_file"))
            self.gridLayout.addWidget(self.label_file, 1, 0, 1, 1)
            self.label_srid = QtGui.QLabel(self.gridLayoutWidget)
            self.label_srid.setObjectName(_fromUtf8("label_srid"))
            self.gridLayout.addWidget(self.label_srid, 3, 0, 1, 1)
            spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
            self.gridLayout.addItem(spacerItem, 5, 1, 1, 1)
            spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
            self.gridLayout.addItem(spacerItem1, 0, 1, 1, 1)
     
            self.retranslateUi(Ui_Download)
            QtCore.QObject.connect(self.pushButton_Browse, QtCore.SIGNAL(_fromUtf8("clicked()")), Ui_Download.open)
            QtCore.QObject.connect(self.pushButton_srid, QtCore.SIGNAL(_fromUtf8("clicked()")), Ui_Download.open)
            QtCore.QObject.connect(self.pushButton_Import, QtCore.SIGNAL(_fromUtf8("clicked()")), Ui_Download.open)
            QtCore.QMetaObject.connectSlotsByName(Ui_Download)
     
            self.pushButton_Browse.clicked.connect(self.browseDialog)
            self.pushButton_srid.clicked.connect(self.uiSrid)
            self.pushButton_Import.clicked.connect(self.uiLoad)
            #self.lineEdit_srid.textEdited.connect(self.srid)# Code directement entré par l'utilisateur
     
        def retranslateUi(self,Ui_Download):
            Ui_Download.setWindowTitle(_translate("Ui_Download", "Ui_Download", None))
            self.label_titre.setText(_translate("Ui_Download", "Data Download", None))
            self.pushButton_Browse.setText(_translate("Ui_Download", "Browse", None))
            self.pushButton_srid.setText(_translate("Ui_Download", "SRID", None))
            self.pushButton_Import.setText(_translate("Ui_Download", "Import", None))
            self.label_file.setText(_translate("Ui_Download", "Chose a file to import :", None))
            self.label_srid.setText(_translate("Ui_Download", "Chose a srid :", None))
     
        def browseDialog(self, Ui_Download):
            """Selection du fichier et affichage du chemin d'accès"""
            pathfile = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/home')
            correctedpathfile= pathfile.replace('\\', '/') #Version du chemin pour les requêtes postgresql
            self.lineEdit_pathfile.setText(str(correctedpathfile))
     
     
        def uiSrid(self):
            """Ouvre la fentre de selection du code srid """
            self.windowSRID= QtGui.QDialog()
            self.windowSRID.setWindowModality(QtCore.Qt.ApplicationModal)
            self.uisrid = ui_srid.Ui_uiSrid()
            self.uisrid.setupUi(self.windowSRID, self)    
            self.windowSRID.exec_()
     
        def srid(self,srid_return) :
            """Remplis le srid dans la base de donner"""
            self.lineEdit_srid.setText(srid_emit)
    fenêtre 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    class Ui_uiSrid(QtGui.QMainWindow):
     
        signal_srid = pyqtSignal(str)
     
     
        def setupUi(self, uiSrid,Main):
            uiSrid.setObjectName(_fromUtf8("uiSrid"))
            uiSrid.setWindowModality(QtCore.Qt.WindowModal)
            uiSrid.resize(781, 427)
            self.gridLayoutWidget = QtGui.QWidget(uiSrid)
            self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 30, 761, 371))
            self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
            self.gridLayout = QtGui.QGridLayout(self.gridLayoutWidget)
            self.gridLayout.setMargin(0)
            self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
            self.tableWidget = QtGui.QTableWidget(self.gridLayoutWidget)
            self.tableWidget.setObjectName(_fromUtf8("tableWidget"))
            self.tableWidget.setColumnCount(0)
            self.tableWidget.setRowCount(0)
            self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1)
     
            self.retranslateUi(uiSrid)
            QtCore.QMetaObject.connectSlotsByName(uiSrid)
     
            self.tableWidget.cellDoubleClicked.connect(self.returnSRID) 
            self.sridData() # Rempli la table
     
            QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL(_fromUtf8("doubleClicked(QModelIndex)")), uiSrid.close)
     
    #Test fermeture
            #QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL(_fromUtf8("doubleClicked(QModelIndex)")),self.doubleClick)
        #def doubleClick (self):   
            #self.accept()
     
     
        def retranslateUi(self, uiSrid):
            uiSrid.setWindowTitle(_translate("uiSrid", "Dialog", None))
     
        def sridData(self): ##REMPLISSAGE
            try:
                conn = psycopg2.connect("dbname='postgis_21_sample' user='postgres' host='localhost' password='postgresql'")
            except:
                print "I am unable to connect to the database"
            cur = conn.cursor()        
            self.data= cur.execute("SELECT srtext, srid_text FROM spatial_ref_sys;")
            data = cur.fetchall()             
            lignes = len(data)
            columns =  len(data[0])
            i = 0
            j = 0
            self.tableWidget.setRowCount(lignes)
            self.tableWidget.setColumnCount(columns)
            self.tableWidget.setHorizontalHeaderLabels(['Label sird', 'srid'])
            self.tableWidget.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.Stretch)
     
            for i in range(lignes):
                for j in range(columns):
                    item = QtGui.QTableWidgetItem(data[i][j])
                    self.tabledata = self.tableWidget.setItem(i, j, item)
     
        def returnSRID(self,row,column): # Apellé seulemment lorsque l'on selection une ligne
            Row = self.tableWidget.currentRow()
            currentCol=self.tableWidget.currentColumn()
            if currentCol ==0 :
                Col = currentCol +1
            else:
                Col = currentCol
            srid_emit =self.tableWidget.item(Row,Col).text() # code srid à envoyer à ui_download
     
            #Passage de srid_emit
            uiDownload = ui_download.Ui_Download()
            self.signal_srid.connect(uiDownload.setupUi(srid_emit))
            self.signal_srid.emit(srid_emit)

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Elle m'ont l'air spéciales tes classes, on dirait du code produit par pyuic4 et modifié par tes soins.

    Ceci n'est pas normal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class Ui_Download(QtGui.QMainWindow):
     
        def setupUi(self, Ui_Download, Main):
    Soit tu instancies ta main window comme ceci:
    Façon pyuic4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        MainWindow = QtGui.QMainWindow()
        self.ui = Ui_Download()
        self.ui.setupUi(MainWindow, self)
        self.ui.show()
    Dans ce cas, ta classe doit être déclarée comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Ui_Download(objet):
     
        def setupUi(self, MainWindow, Main):
            # Et tu remplace Ui_Download par MainWindow partout dans la suite du code
    Soit tu l'instancies comme ceci:
    Facon pythonique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        self.ui = Ui_Download(self)
        self.ui.show()
    Dans ce cas, ta classe doit être déclarée comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Ui_Download(QtGui.QMainWindow):
     
        def __init__(self, Main):
            super(Ui_Download, self).__init__()
            # Et tu remplace Ui_Download par self partout dans la suite du code
    Tu choisis une méthode mais pas un mélange des deux, les erreurs qui pourraient en découler seront très difficiles à comprendre.

    Pareil pour la boîte de dialogue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class Ui_uiSrid(QtGui.QMainWindow):
        signal_srid = pyqtSignal(str)
        def setupUi(self, uiSrid,Main):
    Pourquoi QMainWindow ? Alors que tu la déclares d'abord comme QDialog, si cela ne déclenche pas d'erreur c'est parce que dans ce code QMainWindow n'est pas instancié. Et donc, ne sert à rien.

    Même chose que pour la main window
    Façon pyuic4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        def uiSrid(self):
            """Ouvre la fentre de selection du code srid """
            self.windowSRID= QtGui.QDialog()
            self.windowSRID.setWindowModality(QtCore.Qt.ApplicationModal)
            self.uisrid = ui_srid.Ui_uiSrid()
            self.uisrid.setupUi(self.windowSRID, self)    
            self.windowSRID.exec_()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Ui_uiSrid(QtCore.QObject):
        # Il faut utiliser QtCore.QObject pour pyqtSignal
        signal_srid = pyqtSignal(str)
        def setupUi(self, uiSrid, Main):

    Facon pythonique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        def uiSrid(self):
            """Ouvre la fentre de selection du code srid """
            self.uisrid = ui_srid.Ui_uiSrid(self)
            self.uisrid.setWindowModality(QtCore.Qt.ApplicationModal)   
            self.uisrid.exec_()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Ui_uiSrid(QtCore.Dialog):
        signal_srid = pyqtSignal(str)
        def __init__(self, Main):
            super(Ui_uiSrid, self).__init__()
            # Et tu remplace uiSrid par self partout dans la suite du code
    Pour fermer le dialogue maintenant.
    Je considère la méthode dite pythonique, mais ce sera pareil pour l'autre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        def uiSrid(self):
            """Ouvre la fenêtre de selection du code srid """
            self.uisrid = ui_srid.Ui_uiSrid(self)
            self.uisrid.setWindowModality(QtCore.Qt.ApplicationModal)
            self.uisrid.signal_srid.connect(self.lineEdit_srid.setText)
            self.uisrid.exec_()
    Et tu supprimes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        def srid(self,srid_return) :
            """Remplis le srid dans la base de donner"""
            self.lineEdit_srid.setText(srid_emit)
    qui ne sert plus à rien.
    Le dialogue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            # Ça c'est OK
            self.tableWidget.cellDoubleClicked.connect(self.returnSRID)
     
        def returnSRID(self, row, column):
            if column == 0:
                column = 1
            self.signal_srid.emit(self.tableWidget.item(row, column).text())
            self.accept()
            # et tu effaces le reste bien sur

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Elle m'ont l'air spéciales tes classes, on dirait du code produit par pyuic4 et modifié par tes soins.
    Pour tout te dire la base du plugin à été automatiquement généré par le logiciel QGIS pour lequel "j'essaye" de developper ce nouvel outil. J'ai utiliser ensuite QDesigner pour faire les fenêtres. En effet j'ai moi même modifier le code pyui4c en pensant bien faire. Je me suis lancé dans ce projet dans le but d'apprendre un nouveau language de prog, c'est pourquoi mes début sont laborieux (J'aime bien les défit )

    Facon pythonique
    Je me suis dit que c'était peut être mieux pour moi en tant que débutante dans ce monde pythonique ! Du coup j'ai essayé de suivre tes conseils et fait quelques modifications et j'ai un retour :
    class Ui_uiSrid(QtCore.QDialog):
    AttributeError: 'module' object has no attribute 'QDialog'
    [

    Mon code :
    Main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    # -*- coding: utf-8 -*-
     
    # Form implementation generated from reading ui file 'ui_main.ui'
    #
    # Created: Tue Aug 05 11:06:25 2014
    #      by: PyQt4 UI code generator 4.10.2
    #
    # WARNING! All changes made in this file will be lost!
     
    ##### Class UI 1
    import os, sys
    from PyQt4 import QtCore
    from PyQt4 import QtGui
    import ui_download
     
     
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        def _fromUtf8(s):
            return s
    try:
        _encoding = QtGui.QApplication.UnicodeUTF8
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig, _encoding)
    except AttributeError:
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig)
     
     
    class Ui_Main(QtGui.QMainWindow):
        def __init__(self):
            super(Ui_Main, self).__init__()
     
        def setupUi(self):
            #UI
            self.setObjectName(_fromUtf8("Main"))
            self.resize(400, 251)
            self.label_menu = QtGui.QLabel(self)
            self.label_menu.setGeometry(QtCore.QRect(20, 30, 191, 16))
            font = QtGui.QFont()
            font.setFamily(_fromUtf8("Calibri"))
            font.setPointSize(12)
            font.setBold(True)
            font.setItalic(False)
            font.setUnderline(False)
            font.setWeight(75)
            font.setStrikeOut(False)
            font.setStyleStrategy(QtGui.QFont.PreferDefault)
            self.label_menu.setFont(font)
            self.label_menu.setObjectName(_fromUtf8("label_menu"))
            self.horizontalLayoutWidget = QtGui.QWidget(self)
            self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 100, 381, 61))
            self.horizontalLayoutWidget.setObjectName(_fromUtf8("horizontalLayoutWidget"))
            self.horizontalLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget)
            self.horizontalLayout.setMargin(0)
            self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
            self.pushButton_Download = QtGui.QPushButton(self.horizontalLayoutWidget)
            self.pushButton_Download.setObjectName(_fromUtf8("pushButton_Download"))
            self.horizontalLayout.addWidget(self.pushButton_Download)
            self.pushButton_PostGIS = QtGui.QPushButton(self.horizontalLayoutWidget)
            self.pushButton_PostGIS.setObjectName(_fromUtf8("pushButton_PostGIS"))
            self.horizontalLayout.addWidget(self.pushButton_PostGIS)
            self.pushButton_Cancel = QtGui.QPushButton(Main)
            self.pushButton_Cancel.setGeometry(QtCore.QRect(310, 210, 75, 23))
            self.pushButton_Cancel.setObjectName(_fromUtf8("pushButton_Cancel"))
     
            #SIGNAUX Closing Windows
            self.retranslateUi(self)
            QtCore.QObject.connect(self.pushButton_Cancel,QtCore.SIGNAL(_fromUtf8("pressed()")), self ,QtCore.SLOT("close()"))
            QtCore.QObject.connect(self.pushButton_Download, QtCore.SIGNAL(_fromUtf8("clicked()")), self, QtCore.SLOT("close()"))
            QtCore.QObject.connect(self.pushButton_PostGIS, QtCore.SIGNAL(_fromUtf8("pressed()")), self, QtCore.SLOT("close()"))
            QtCore.QMetaObject.connectSlotsByName(self)
     
            #SIGNAUX Actions
            self.pushButton_Download.clicked.connect(self.uiDownload)
     
        def retranslateUi(self):
            Main.setWindowTitle(_translate("self", "Menu Dataconnect", None))
            self.label_menu.setText(_translate("self", "Plugin DataConnect", None))
            self.pushButton_Download.setText(_translate("self", "Download new file", None))
            self.pushButton_PostGIS.setText(_translate("self", "Open PostGIS", None))
            self.pushButton_Cancel.setText(_translate("self", "Cancel", None))
     
     
        def uiDownload(self):
            """Lance l'ouverture de la fenêtre ui_download"""
            self.uidownload = ui_download.Ui_Dowload(self)
            self.uidownload.setWindowModality(QtCore.Qt.ApplicationModal)   
            self.uidownload.exec_()
     
        def loadPostGIS(self):
            """ lancera le chargement des vues postgis dans qgis"""
     
     
    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        #instanciation pythomique    
        self.ui = Ui_Main(self)
        self.ui.show()
     
        sys.exit(app.exec_())
    uiDownload:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    # -*- coding: utf-8 -*-
     
    # Form implementation generated from reading ui file 'download.ui'
    #
    # Created: Tue Aug 12 16:01:29 2014
    #      by: PyQt4 UI code generator 4.10.2
    #
    # WARNING! All changes made in this file will be lost!
     
     
    import sys
    from PyQt4 import QtCore
    from PyQt4 import QtGui
    from PyQt4.QtGui import QMessageBox
    from PyQt4.QtCore import SIGNAL
     
    import psycopg2
    import ui_load
    import ui_srid
     
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        def _fromUtf8(s):
            return s
     
    try:
        _encoding = QtGui.QApplication.UnicodeUTF8
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig, _encoding)
    except AttributeError:
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig)
     
    class Ui_Download(QDialog):
        def __init__(self, Main):
            super(Ui_Download, self).__init__()
     
        def setupUi(self, Ui_Download, Main):
            self.setObjectName(_fromUtf8("Ui_Download"))
            self.resize(651, 251)
            self.gridLayoutWidget = QtGui.QWidget(self)
            self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 10, 631, 231))
            self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
            self.gridLayout = QtGui.QGridLayout(self.gridLayoutWidget)
            self.gridLayout.setMargin(0)
            self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
            self.label_titre = QtGui.QLabel(self.gridLayoutWidget)
            font = QtGui.QFont()
            font.setFamily(_fromUtf8("Calibri"))
            font.setPointSize(12)
            font.setBold(True)
            font.setWeight(75)
            self.label_titre.setFont(font)
            self.label_titre.setObjectName(_fromUtf8("label_titre"))
            self.gridLayout.addWidget(self.label_titre, 0, 0, 1, 1)
            self.lineEdit_srid = QtGui.QLineEdit(self.gridLayoutWidget)
            self.lineEdit_srid.setObjectName(_fromUtf8("lineEdit_srid"))
            self.gridLayout.addWidget(self.lineEdit_srid, 4, 1, 1, 1)
            self.pushButton_Browse = QtGui.QPushButton(self.gridLayoutWidget)
            self.pushButton_Browse.setObjectName(_fromUtf8("pushButton_Browse"))
            self.gridLayout.addWidget(self.pushButton_Browse, 2, 0, 1, 1)
            self.pushButton_srid = QtGui.QPushButton(self.gridLayoutWidget)
            self.pushButton_srid.setObjectName(_fromUtf8("pushButton_srid"))
            self.gridLayout.addWidget(self.pushButton_srid, 4, 0, 1, 1)
            self.pushButton_Import = QtGui.QPushButton(self.gridLayoutWidget)
            self.pushButton_Import.setObjectName(_fromUtf8("pushButton_Import"))
            self.gridLayout.addWidget(self.pushButton_Import, 6, 1, 1, 1)
            self.lineEdit_pathfile = QtGui.QLineEdit(self.gridLayoutWidget)
            self.lineEdit_pathfile.setObjectName(_fromUtf8("lineEdit_pathfile"))
            self.gridLayout.addWidget(self.lineEdit_pathfile, 2, 1, 1, 1)
            self.label_file = QtGui.QLabel(self.gridLayoutWidget)
            self.label_file.setObjectName(_fromUtf8("label_file"))
            self.gridLayout.addWidget(self.label_file, 1, 0, 1, 1)
            self.label_srid = QtGui.QLabel(self.gridLayoutWidget)
            self.label_srid.setObjectName(_fromUtf8("label_srid"))
            self.gridLayout.addWidget(self.label_srid, 3, 0, 1, 1)
            spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
            self.gridLayout.addItem(spacerItem, 5, 1, 1, 1)
            spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
            self.gridLayout.addItem(spacerItem1, 0, 1, 1, 1)
     
            self.retranslateUi(self)
            QtCore.QObject.connect(self.pushButton_Browse, QtCore.SIGNAL(_fromUtf8("clicked()")), self.open)
            QtCore.QObject.connect(self.pushButton_srid, QtCore.SIGNAL(_fromUtf8("clicked()")), self.open)
            QtCore.QObject.connect(self.pushButton_Import, QtCore.SIGNAL(_fromUtf8("clicked()")), self.open)
            QtCore.QMetaObject.connectSlotsByName(self)
     
            self.pushButton_Browse.clicked.connect(self.browseDialog)
            self.pushButton_srid.clicked.connect(self.uiSrid)
            self.pushButton_Import.clicked.connect(self.uiLoad)
            #self.lineEdit_srid.textEdited.connect(self.srid)# Code directement entré par l'utilisateur
     
        def retranslateUi(self):
            MainWindow.setWindowTitle(_translate("Ui_Download", "Ui_Download", None))
            self.label_titre.setText(_translate("Ui_Download", "Data Download", None))
            self.pushButton_Browse.setText(_translate("Ui_Download", "Browse", None))
            self.pushButton_srid.setText(_translate("Ui_Download", "SRID", None))
            self.pushButton_Import.setText(_translate("Ui_Download", "Import", None))
            self.label_file.setText(_translate("MUi_Download", "Chose a file to import :", None))
            self.label_srid.setText(_translate("Ui_Download", "Chose a srid :", None))
     
        def browseDialog(self):
            """Selection du fichier et affichage du chemin d'accès"""
            pathfile = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/home')
            correctedpathfile= pathfile.replace('\\', '/') #Version du chemin pour les requêtes postgresql
            self.lineEdit_pathfile.setText(str(correctedpathfile))
     
        def uiSrid(self):
            """Ouvre la fentre de selection du code srid """
            self.uisrid = ui_srid.Ui_uiSrid(self)
            self.uisrid.setWindowModality(QtCore.Qt.ApplicationModal)   
            self.uisrid.exec_()
     
        def uiLoad(self):
            """Lancera l'importation"""
    uiSrid:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    # -*- coding: utf-8 -*-
     
    # Form implementation generated from reading ui file 'tableWidaget.ui'
    #
    # Created: Wed Aug 13 12:27:35 2014
    #      by: PyQt4 UI code generator 4.10.2
    #
    # WARNING! All changes made in this file will be lost!
     
    import sys
    from PyQt4 import QtCore
    from PyQt4 import QtGui
    from PyQt4.QtGui import QMessageBox
    from PyQt4.QtGui import QAbstractItemView
    from PyQt4.QtCore import QObject, pyqtSignal
    from PyQt4.QtCore import QEvent
     
    import psycopg2
    import ui_download
     
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        def _fromUtf8(s):
            return s
     
    try:
        _encoding = QtGui.QApplication.UnicodeUTF8
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig, _encoding)
    except AttributeError:
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig)
     
    class Ui_uiSrid(QtCore.QDialog):
        signal_srid = pyqtSignal(str)
        def __init__(self, Main):
            super(Ui_uiSrid, self).__init__()
     
        def setupUi(self,Main):
            self.setObjectName(_fromUtf8("uiSrid"))
            self.setWindowModality(QtCore.Qt.WindowModal)
            self.resize(781, 427)
            self.gridLayoutWidget = QtGui.QWidget(uiSrid)
            self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 30, 761, 371))
            self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
            self.gridLayout = QtGui.QGridLayout(self.gridLayoutWidget)
            self.gridLayout.setMargin(0)
            self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
            self.tableWidget = QtGui.QTableWidget(self.gridLayoutWidget)
            self.tableWidget.setObjectName(_fromUtf8("tableWidget"))
            self.tableWidget.setColumnCount(0)
            self.tableWidget.setRowCount(0)
            self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1)
     
            self.retranslateUi(uiSrid)
            QtCore.QMetaObject.connectSlotsByName(self)
     
            self.tableWidget.cellDoubleClicked.connect(self.returnSRID) 
            self.sridData() # Rempli la table
     
            QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL(_fromUtf8("doubleClicked(QModelIndex)")), self.close)
     
        def retranslateUi(self, uiSrid):
            self.setWindowTitle(_translate("self", "Dialog", None))
     
        def sridData(self): ##REMPLISSAGE
            try:
                conn = psycopg2.connect("dbname='postgis_21_sample' user='postgres' host='localhost' password='postgresql'")
            except:
                print "I am unable to connect to the database"
            cur = conn.cursor()        
            self.data= cur.execute("SELECT srtext, srid_text FROM spatial_ref_sys;")
            data = cur.fetchall()             
            lignes = len(data)
            columns =  len(data[0])
            i = 0
            j = 0
            self.tableWidget.setRowCount(lignes)
            self.tableWidget.setColumnCount(columns)
            self.tableWidget.setHorizontalHeaderLabels(['Label sird', 'srid'])
            self.tableWidget.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.Stretch)
     
            for i in range(lignes):
                for j in range(columns):
                    item = QtGui.QTableWidgetItem(data[i][j])
                    self.tabledata = self.tableWidget.setItem(i, j, item)
     
        def returnSRID(self,row,column): # Apellé seulemment lorsque l'on selection une ligne
            if column ==0:
                column =1
            self.signal_srid.emit(self.tableWidget.item(row, column).text())
            self.accept()
    PS: Tes explications sont vraiment super claire, c'est super agréable. Je tenais à le souligner!

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Ha oui, c'est QtGui pas QtCore pour le QDialog (que je confondrai comme ma gauche et ma droite pour le restant de mes jours)


    Un conseil, mets ce lien dans tes marque pages, on y revient toujours.

    http://pyqt.sourceforge.net/Docs/PyQt4/classes.html

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut PyQt :Ouverture d'une fenêtre : _translate()
    Bonjour,

    Ce message correspont à une erreur lors de l'affichage d'une fenêtre créer via QtDesigner.

    Ayant bien vu que mon code comportait un grand nombre d'erreur autant au niveau de la structuration de mes class, que des erreurs basiques de code. Pour cela, j'ai étudié plusieurs codes de plugins pour qgis et repris on travail de zéro. En gros j'ai remarqué que pour chaque fenêtre à afficher, les plugins avaient une class propre à chaque ui qui les instanciait. J'ai donc repris ce principe.
    Pour une meilleure comprehension mon plugin à maintenant cette structure :
    Class principal : PostgisConnection , elle va permetre de lancer les différentes fenêtres secondaires et recevoir les signaux
    Class secondaires : Elles sont lancées par ma class principal et elles ne font que intancier les ui
    Class ui : Code QDesigner et contiennent les propriétés des fenêtres

    Pour le moment, j'ai une fenêtre principal qui s'affiche sans problèmes et propose 4 boutons qui représentent différentes options que l'utilisateur aurat. Lorsque je clique sur mon premier boutton pour afficher une seconde fenêtre (QDialog), j'ai cette erreur :
    Pour la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.retranslateUi(Importation)
    Erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: retranslateUi() takes exactly 1 argument (2 given)
    Si je met en commentaire cette ligne, ma fenêtre s'ouvre mais naturellement je n'ai plus aucun text apparent.
    je ne sais pas comment ne plus avoir de traduction automatique via QtDesigner. Et ne comprend pas ce message car pour ma première fenêtre, je n'ai aucun problème.

    Merci d'avance

  10. #10
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Comme tu as adapté le code, je suppose que Importation n'est plus nécessaire dans l'appel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    self.retranslateUi()

Discussions similaires

  1. Fermer et ouvrir des fenètres sous Eclipse
    Par JeanNoel53 dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 12/05/2015, 07h48
  2. [AC-2007] [VBA] Fermer la fenêtre des propriétés
    Par mcdotta dans le forum VBA Access
    Réponses: 3
    Dernier message: 26/04/2010, 09h57
  3. Fermer la fenêtre des préférences sans cliquer sur le bouton Cancel
    Par Laurent.B dans le forum Eclipse Platform
    Réponses: 7
    Dernier message: 22/01/2010, 22h12
  4. Fermer la fenêtre des propriétés ?
    Par electrosat03 dans le forum Access
    Réponses: 4
    Dernier message: 01/03/2007, 16h01
  5. Réponses: 5
    Dernier message: 04/01/2007, 14h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo