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 :

Remplir un QcomboBox à partir d'une table Sqlite [QtSql]


Sujet :

PyQt Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Par défaut Remplir un QcomboBox à partir d'une table Sqlite
    Bonjour,

    Excusez-moi peut être que le problème que je pose a été déjà abordé.
    En résumé, je voudrai affiché dans un combobox une liste à partir d'une table. Je me suis inspiré d'un exemple que j'ai trouvé sur la page : http://www.voidynullness.net/blog/20...atabase-table/
    Seulement, le combobox n'affiche rien

    Vous voudrez m'aider pour résoudre ce problème et de progresser dans mon projet. Et si vous avez une solution meilleures, je suis preneur.
    Merci infiniment.

    Ci-joint, les deux fichiers sources


    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
     
    # -*- coding: utf-8 -*-
    # Form implementation generated from reading ui file 'menu1.ui'
    #
    # Created by: PyQt4 UI code generator 4.11.4
    #
    # WARNING! All changes made in this file will be lost!
     
    from PyQt4 import QtCore, QtGui
    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_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName(_fromUtf8("MainWindow"))
            MainWindow.resize(605, 359)
            self.centralwidget = QtGui.QWidget(MainWindow)
            self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
            self.comboBox = QtGui.QComboBox(self.centralwidget)
            self.comboBox.setGeometry(QtCore.QRect(160, 90, 301, 31))
            self.comboBox.setObjectName(_fromUtf8("comboBox"))
            MainWindow.setCentralWidget(self.centralwidget)
            self.menubar = QtGui.QMenuBar(MainWindow)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 605, 18))
            self.menubar.setObjectName(_fromUtf8("menubar"))
            self.menuFichiers = QtGui.QMenu(self.menubar)
            self.menuFichiers.setObjectName(_fromUtf8("menuFichiers"))
            self.menuFactures = QtGui.QMenu(self.menubar)
            self.menuFactures.setObjectName(_fromUtf8("menuFactures"))
            self.menuM_moire = QtGui.QMenu(self.menubar)
            self.menuM_moire.setObjectName(_fromUtf8("menuM_moire"))
            MainWindow.setMenuBar(self.menubar)
            self.statusbar = QtGui.QStatusBar(MainWindow)
            self.statusbar.setObjectName(_fromUtf8("statusbar"))
            MainWindow.setStatusBar(self.statusbar)
            self.actionQuitter = QtGui.QAction(MainWindow)
            self.actionQuitter.setObjectName(_fromUtf8("actionQuitter"))
            self.menuFichiers.addAction(self.actionQuitter)
            self.menuFichiers.addSeparator()
            self.menubar.addAction(self.menuFichiers.menuAction())
            self.menubar.addAction(self.menuFactures.menuAction())
            self.menubar.addAction(self.menuM_moire.menuAction())
     
            self.retranslateUi(MainWindow)
            QtCore.QObject.connect(self.comboBox, QtCore.SIGNAL(_fromUtf8("currentIndexChanged(int)")), MainWindow.show)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
     
        def retranslateUi(self, MainWindow):
            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
            self.comboBox.setAccessibleDescription(_translate("MainWindow", "<html><head/><body><p><br/></p></body></html>", None))
            self.menuFichiers.setTitle(_translate("MainWindow", "Fichiers", None))
            self.menuFactures.setTitle(_translate("MainWindow", "Factures", None))
            self.menuM_moire.setTitle(_translate("MainWindow", "Mémoire", None))
            self.actionQuitter.setText(_translate("MainWindow", "Quitter", None))
    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
     
    import sys
    import os
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    from PyQt4.QtSql import *
    from menu1 import Ui_MainWindow
     
    CONFIG_DATABASE_PATH = "./"
    CONFIG_DATABASE_NAME = "DBFM.db"
     
    class Fenetre(QMainWindow , Ui_MainWindow):
     
        def __init__(self):
            QMainWindow.__init__(self)
            self.setupUi(self)
            self.setWindowTitle("Exemple Utilisation d'un ComboBox")
            self.model = QSqlTableModel(self)
            self.model.setTable("CategoriesClients")
            self.model.select()
     
            self.comboBox.setModel(self.model)
            self.comboBox.setModelColumn(
                            self.model.fieldIndex("CategorieLibelle"))
        def data():
            filename = os.path.join(CONFIG_DATABASE_PATH,
                                    CONFIG_DATABASE_NAME)
            db= QSqlDatabase.addDatabase("QSQLITE")
            db.setDatabaseName(filename)
            if not db.open():
                QMessageBox.warning(None, "Combo Box Example",
                QString("Database Error: %1").arg(db.lastError().text()))
            sys.exit(1)
    app = QApplication(sys.argv)
    window = Fenetre()
    window.show()
    app.exec_()

  2. #2
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Bonjour,
    Tu n'appelles pas ta fonction data(). Tu ne te connectes donc pas à ta db.

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Par défaut
    Merci pierjean, vous voudrez bien m'indiquer comment appeler la fonction data() vous voyez que je suis un novice dans ce domaine
    Cordialement.

  4. #4
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Tu devrais sortir la fonction data() de ta classe Fenetre, et l'appeler avant de créer ton QSqlTableModel.
    ex :
    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
    import sys
    import os
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    from PyQt4.QtSql import *
    from menu1 import Ui_MainWindow
     
    CONFIG_DATABASE_PATH = "./"
    CONFIG_DATABASE_NAME = "DBFM.db"
     
    class Fenetre(QMainWindow , Ui_MainWindow):
     
        def __init__(self):
            QMainWindow.__init__(self)
            self.setupUi(self)
            self.setWindowTitle("Exemple Utilisation d'un ComboBox")
            self.model = QSqlTableModel(self)
            self.model.setTable("CategoriesClients")
            self.model.select()
     
            self.comboBox.setModel(self.model)
            self.comboBox.setModelColumn(
                            self.model.fieldIndex("CategorieLibelle"))
    def data():
    	filename = os.path.join(CONFIG_DATABASE_PATH,
    				CONFIG_DATABASE_NAME)
    	db= QSqlDatabase.addDatabase("QSQLITE")
    	db.setDatabaseName(filename)
    	if not db.open():
    		QMessageBox.warning(None, "Combo Box Example",
    		QString("Database Error: %1").arg(db.lastError().text()))
    		sys.exit(1)
     
    app = QApplication(sys.argv)
    data()
    window = Fenetre()
    window.show()
    app.exec_()

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Par défaut
    Bonjour pierjean,

    Excusez mon retard de vous répondre, j'ai modifié le code comme vous m'avez dit mais à l'exécution du code la fenêtre principale de ne s'affiche pas. Un message d'erreur s'affiche sur la console : Exit Code : 1
    Merci pour votre patience.

  6. #6
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Par défaut
    Re-Bonjour pierjean,

    J'ai trouvé l'erreur c'était un problème d'indentation à partir de "if" jusqu'à "sys.exit(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
     
    def data():
        #Connexion à la base de données
            filename = os.path.join(CONFIG_DATABASE_PATH,
                                    CONFIG_DATABASE_NAME)
            db= QSqlDatabase.addDatabase("QSQLITE")
            db.setDatabaseName(filename)
            if not db.open():
                QMessageBox.warning(None, "Combo Box Example",
                     QString("Database Error: %1").arg(db.lastError().text()))
                sys.exit(1)
    app = QApplication(sys.argv)
    data()
    window = Fenetre()
    window.show()
    app.exec_()
    Ainsi, le code juste et qui marche est le suivant :
    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
     
     
    import sys
    import os
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    from PyQt4.QtSql import *
    from menu1 import Ui_MainWindow
     
    CONFIG_DATABASE_PATH = "./"
    CONFIG_DATABASE_NAME = "DBFM.db"
     
    class Fenetre(QMainWindow , Ui_MainWindow):
     
        def __init__(self):
            QMainWindow.__init__(self)
            self.setupUi(self)
            self.setWindowTitle("Exemple Utilisation d'un ComboBox")
     
            self.model = QSqlTableModel(self)
            self.model.setTable("CategoriesClients")
            self.model.select()
            self.comboBox.setModel(self.model)
            self.comboBox.setModelColumn(
                            self.model.fieldIndex("CategorieLibelle"))
     
    def data():
        #Connexion à la base de données
            filename = os.path.join(CONFIG_DATABASE_PATH,
                                    CONFIG_DATABASE_NAME)
            db= QSqlDatabase.addDatabase("QSQLITE")
            db.setDatabaseName(filename)
            if not db.open():
                QMessageBox.warning(None, "Combo Box Example",
                     QString("Database Error: %1").arg(db.lastError().text()))
                sys.exit(1)
    app = QApplication(sys.argv)
    data()
    window = Fenetre()
    window.show()
    app.exec_()

  7. #7
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Par défaut
    Bonjour,

    Dans le même contexte, si j'ai plusieurs comboBox à utiliser dans un formulaire est ce que je doit toujours utiliser "QSqlTableModel" pour chaque table ou bien il y a une autre façon de faire ???
    Merci

  8. #8
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Bonjour,
    Je ne connais pas ton projet, mais pour un formulaire, tu peux utiliser un QDataWidgetMapper qui se charge de faire le lien entre tes widgets et ta table.
    Il faudra tout de même utiliser un QSqlTableModel.

  9. #9
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Par défaut
    Bonjour,

    Mon petit projet consiste à créer une application pour le suivi des formations données à notre effectif (Stage, Séminaire, etc. ). Ainsi, l'agent chargé choisira d'une liste déroulante l'agent concerné, le type de formation, le thème et la durée.
    Comme vous le voyez il un un Qtableview et 4 comboBox.
    Cordialement.

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

Discussions similaires

  1. Remplir un select à partir d'une table bdd
    Par Hind4Dev dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 19/02/2016, 20h37
  2. [Dojo] Remplir un Grid à partir d'une table SQL
    Par lagoule dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 10/06/2009, 11h13
  3. [MySQL] Remplir un array à partir d'une table
    Par Dauphin dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/06/2007, 07h25
  4. Réponses: 4
    Dernier message: 01/06/2007, 13h54
  5. Réponses: 12
    Dernier message: 28/11/2006, 15h34

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