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 :

[QMessageBox] Not enough arguments [QtGui]


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    Par défaut [QMessageBox] Not enough arguments
    Bonjour,

    Je suis sous python 2.7 et PyQt4. Je souhaite utiliser un QMessageBox pour informer mon utilisateur qu'il n'a pas rempli une des cases demandée ou que la selection n'est pas valide. J'ai essayé pas mal de chose, mais je ne m'em sort pas avec le QMessageBox, je ne dois pas avoir bien assimilée le fonctionnement de ce module.

    J'ai ce message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Traceback (most recent call last):
      File "C:\Users\AUGU/.qgis2/python/plugins\PostgisConnection\ui_importation.py", line 149, in validate_entries
        QMessageBox.information(self, self.trUtf8("Some required fields are missing, Please complete the form."))#Icon not callable
    TypeError: arguments did not match any overloaded call:
      QMessageBox.information(QWidget, QString, QString, QMessageBox.StandardButtons buttons=QMessageBox.Ok, QMessageBox.StandardButton defaultButton=QMessageBox.NoButton): not enough arguments
      QMessageBox.information(QWidget, QString, QString, int, int button1=0, int button2=0): not enough arguments
      QMessageBox.information(QWidget, QString, QString, QString, QString button1Text=QString(), QString button2Text=QString(), int defaultButtonNumber=0, int escapeButtonNumber=-1): not enough arguments
    Mon code est celui ci :
    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
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
     
    import sys
    from PyQt4 import QtCore
    from PyQt4 import QtGui
     
    from PyQt4.QtGui import QMessageBox
    from PyQt4.QtCore import SIGNAL
     
    import psycopg2
    import importation
    import sriddialog
    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_Importation(QtGui.QWidget):
        def setupUi(self, UiImportation):
            UiImportation.setObjectName(_fromUtf8("UiImportation"))
            UiImportation.resize(651, 251)
            self.gridLayoutWidget = QtGui.QWidget(UiImportation)
            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_sheet = QtGui.QLabel(self.gridLayoutWidget)
            self.label_sheet.setObjectName(_fromUtf8("label_sheet"))
            self.gridLayout.addWidget(self.label_sheet, 5, 0, 1, 1)
            self.r1 = QtGui.QRadioButton(self.gridLayoutWidget)
            self.r1.setObjectName(_fromUtf8("r1"))
            self.gridLayout.addWidget(self.r1, 5, 1, 1, 1)
            self.r2 = QtGui.QRadioButton(self.gridLayoutWidget)
            self.r2.setObjectName(_fromUtf8("r2"))
            self.gridLayout.addWidget(self.r2, 5, 2, 1, 1)
            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.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, 7, 4, 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, 0, 4, 1, 1)
            self.r3 = QtGui.QRadioButton(self.gridLayoutWidget)
            self.r3.setObjectName(_fromUtf8("r3"))
            self.gridLayout.addWidget(self.r3, 5, 3, 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, 4)
            self.lineEdit_srid = QtGui.QLineEdit(self.gridLayoutWidget)
            self.lineEdit_srid.setObjectName(_fromUtf8("lineEdit_srid"))
            self.gridLayout.addWidget(self.lineEdit_srid, 4, 1, 1, 4)
     
            self.retranslateUi(UiImportation)
            QtCore.QMetaObject.connectSlotsByName(UiImportation)
     
            #Connections
            self.pushButton_Browse.clicked.connect(self.browseDialog)
            self.pushButton_srid.clicked.connect(self.sridDialog)
            self.r1.toggled.connect(self.sheetDialog)
            self.r2.toggled.connect(self.sheetDialog)
            self.r3.toggled.connect(self.sheetDialog)
            self.pushButton_Import.clicked.connect(self.validate_entries)
            #QtCore.QObject.connect(self.pushButton_Import, QtCore.SIGNAL("clicked()"),UiImportation.close))
            #self.lineEdit_srid.textEdited.connect(self.srid)# Code directement entré par l'utilisateur
     
        def retranslateUi(self, UiImportation):
            UiImportation.setWindowTitle(_translate("UiImportation", "UiImportation", None))
            self.label_titre.setText(_translate("UiImportation", "Data Download", None))
            self.pushButton_Browse.setText(_translate("UiImportation", "Browse", None))
            self.pushButton_srid.setText(_translate("UiImportation", "SRID", None))
            self.pushButton_Import.setText(_translate("UiImportation", "Import", None))
            self.label_file.setText(_translate("UiImportation", "Chose a file to import :", None))
            self.label_srid.setText(_translate("UiImportation", "Chose a srid :", None))
            self.label_sheet.setText(_translate("UiImportation", "Select a sheet", None))
            self.r1.setText(_translate("UiImportation", "1", None))
            self.r2.setText(_translate("UiImportation", "2", None))
            self.r3.setText(_translate("UiImportation", "3", None))
     
        def browseDialog(self):
            """Selection du fichier et affichage du chemin d'accès"""
            self.pathfile = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/home')
            self.correctedpathfile= self.pathfile.replace('\\', '/') #Version du chemin pour les requêtes postgresql + xrl
            self.lineEdit_pathfile.setText(str(self.correctedpathfile))
            return self.correctedpathfile
     
     
        def sridDialog(self, UiImportation):
            """Ouvre la fentre de selection du code srid """
            self.dlg_srid = sriddialog.SridDialog()
            self.dlg_srid.show() 
            result_srid =self.dlg_srid.exec_()
            """Retrun le srid """
            self.uisrid = ui_srid.Ui_Srid()
            self.srid_selected =self.uisrid.returnSRID
            self.lineEdit_srid.setText(str(self.srid_selected))
            return self.srid_selected
            #return <bound method Ui_Srid.returnSRID of <PostgisConnection.ui_srid.Ui_Srid object at 0x000000000ECEB1E0>>
     
        def sheetDialog( self, UiImportation) :
            if self.r1.isChecked():
                self.index=1
            elif self.r2.isChecked():
                self.index=2
            elif self.r3.isChecked():
                self.index=3
            else:
                self.index=0
            return self.index
     
        def validate_entries (self, Ui_importation):
            if self.lineEdit_pathfile.text()=='':
                QMessageBox.information(self, self.trUtf8("Some required fields are missing, Please complete the form."))#ERREUR
     
        def importationDialog(self,UiImportation):
            """Lance le processus d'importation"""
           # self.path=self.browseDialog.correctedpathfile
           # self.srid =self.srid_selected.sridDialog
            #self.index=self.index.sheetDialog
            self.dlg_import= importation.Importation()
    Merci d'avance !

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Hello,

    QMessageBox.information demande 3 arguments au minimum : parent, titre, texte. Tu n'en fournis que 2.

  3. #3
    Membre confirmé
    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
    Par défaut
    Merci ! En effet c'était une erreur de débutante !

    J'ai une autre question de base je pense aussi. J'ai donc vérifier si ma lineEdit était vide ou non et je souhaite maintenant voir si l'un de mes radioButton est cliqué et s'il ne l'ai pas afficher aussi un message. Je ne sais pas de quel manière developper mon code.

    J'ai cette fonction qui est connecté à mes radioButton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def sheetDialog( self, UiImportation) :
            if self.r1.isChecked():
                self.index=1
            elif self.r2.isChecked():
                self.index=2
            elif self.r3.isChecked():
                self.index=3
            return self.index
    Seulement index est instancié lorsque j'ai déjà cliqué sur mes radioButton, je ne peux donc pas l'utiliser pour un test de validation puisque si rien n'est cliqué, il n'existe pas. Comment savoir si aucun radioButton n'est cliqué de manière optimal ? J'ai pensé aux code si dessous, mais il ne me plait pas trop.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if self.r1.isChecked() or self.r2.isChecked() or self.r3.isChecked() :
        QMessageBox(self, "Box ok", "Une feuille à été choisie"
    else :
        QMessageBox(self, "Box Error", "Selctionner une feuille svp!")
    Je sais que je peux crée un groupe avec mes radioButtons, mais je ne sais pas l'utiliser et je ne sais pas si c'est une bonne option.

    Merci d'avance !

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tout d'abord si tu utilises des QRadioButton c'est qu'un d'entre eux doit être coché par défaut et ça il faut que tu le fasses à l'instanciation de la fenêtre.

    Ensuite il faut bien sur les grouper, rien de compliqué:
    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
     
        self.gr = QButtonGroup(parent)
        self.rb = QRadioButton('texte', parent)
        self.gr.addButton(self.rb)
        self.gr.setId(self.rb, 1)       # C'est ici que c'est interessant
        self.layout.addWidget(self.rb)
        self.rb_1 = QRadioButton('texte_1', parent)
        self.gr.addButton(self.rb_1)
        self.gr.setId(self.rb_1, 2)
        self.layout.addWidget(self.rb_1)
        etc ...
     
        self.gr.clicked([int]).connect(self.monSlot)
     
    def monSlot(self, idx):
        self.index = idx        # Magique non ?
    Autre chose, tu dis que tu as cette fonction connectée à tes radioboutons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    def sheetDialog( self, UiImportation) :
    Ce UiImportation ressemble étrangement à un nom de classe et me paraît suspect à cet endroit. À voir ...

  5. #5
    Membre confirmé
    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
    Par défaut
    Ah ! je savais bien qu'il y avait mieux comme méthode !
    J'ai bien évidemment d'autres questions maintenant :

    self.gr.clicked([int]).connect(self.monSlot)
    A quoi sert [int] ? pour récupérer l'index ? l'index par defaut est bien 0 ?
    J'ai cette erreur : AttributeError: 'QButtonGroup' object has no attribute 'clicked'

    Du coup pour ma validation, si je fait le code suivant ça devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     def validation(self, UiImportation):
            """Lance le processus d'importation si les champs sont correctement remplis"""
            if  self.lineEdit_pathfile.text()=='' or self.lineEdit_srid.text()==''or self.index==0:
                QMessageBox.information(self, "Error Box", "Some required fields are missing, Please complete the form.")
            else:
                QMessageBox.information(self, "Error Box", "Select a sheet please")

  6. #6
    Membre confirmé
    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
    Par défaut
    La ligne correcte est en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.groupButton.buttonClicked.connect(self.sheetDialog)
    Comment récupérer l'index )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def sheetDialog(self, idx):
            self.index =idx
    Lorsque je teste mon index J'ai cela comme msg:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    in validation
        if  self.lineEdit_pathfile.text()=='' or self.lineEdit_srid.text()==''or self.index==0:
    AttributeError: 'Ui_Importation' object has no attribute 'index

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] not enough input arguments
    Par el3oss dans le forum Signal
    Réponses: 1
    Dernier message: 16/04/2015, 13h37
  2. [ode45] not enough input argument
    Par barns_89 dans le forum MATLAB
    Réponses: 1
    Dernier message: 30/09/2013, 23h34
  3. [BODI]erreur Db:not enough space
    Par tigrebin dans le forum BODI
    Réponses: 3
    Dernier message: 06/04/2009, 10h13
  4. restriction souris fenêtre : erreur 8 not enough storage ?
    Par chapeau_melon dans le forum WinDev
    Réponses: 4
    Dernier message: 12/02/2008, 15h14
  5. [ORA-00371] Not enough shared pool memory !!!
    Par max44410 dans le forum Installation
    Réponses: 6
    Dernier message: 30/11/2005, 19h47

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