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 :

[QTableWidget] Remplissage par une requête SQL, mais affichage des lignes dans le désordre [QtGui]


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 [QTableWidget] Remplissage par une requête SQL, mais affichage des lignes dans le désordre
    Bonjour,

    Je suis sous Phython 2.7 et PyQt4.

    J'ai une table dans postgresql qui contient 3916 lignes qui correspondent aux non de réferentiels spatiaux (srtext) et au code du référentiel (srid).
    J'ai besoin de choisir un référentiel pour cela j'ai afficher cette table dans un QtableWidget via une requete sql, je n'ai donc que à faire un signal/slot lorsque je selectionne un ligne. J'ai des erreurs d'affichage de ma table lors que je run mon appli. Le but est de récupérer le code srid pour l'utiliser après dans ma base de donnée Postgis.

    #1 J'ai bien 3916 lignes corespondant à srtext, mais l'orde dans lequel elles s'affichent n'a rien à voir avec la table de ma base de donnée
    #2 Je n'arrive pas à remplir ma seconde colonnes srid, c'est vide.

    Ps: Au dépard j'avais choisi un Qcombox pour afficher mes lignes et j'ai eu le même problème (voir la discution )

    Voici mon code pour ceux qui aurait des idées :

    MErci d'avance
    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
    # -*- coding: utf-8 -*-
    import psycopg2
    import sys
    from PyQt4 import QtCore, QtGui
    from PyQt4.QtGui import *
    from PyQt4.QtCore import SIGNAL, Qt
     
     
    con = None
     
    class MainWindow(QtGui.QTableWidget):
     
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent)
            layout = QtGui.QVBoxLayout()
     
            self.table_widget = QtGui.QTableWidget() # Créer la table
            self.connect(self.table_widget,SIGNAL('cellClicked(int, int)'), self.returnIndex) # Return la ligne
            self.sridData() # Lance le remplissage
     
            layout.addWidget(self.table_widget)
            self.setLayout(layout)
     
        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 FROM spatial_ref_sys;")
            data = cur.fetchall()
     
            lignes = len(data)
            columns =  len(data[0])
            i = 0
            j = 0
     
            self.table_widget.setRowCount(lignes)
            self.table_widget.setColumnCount(columns)
            self.table_widget.setHorizontalHeaderLabels(['Label sird', 'srid'])
            #self.table_widget.setColumnWidth(1, 80)
            self.table_widget.horizontalHeader().setResizeMode(0, QHeaderView.Stretch)
     
            for i in range(lignes):
                for j in range(columns):
                    item = QtGui.QTableWidgetItem(data[i][j])
                    self.tabledata = self.table_widget.setItem(i, j, item)
            #self.table_widget.sortByColumn(0, QtCore.Qt.AscendingOrder) # permet de choisir l'ordre d'affichage
     
        def returnIndex(self,row,column):
            row =row +1
            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 srid FROM spatial_ref_sys;")
            srid = cur.fetchall()
            srid = srid[row]
            print row, srid
     
     
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        wnd = MainWindow()
        wnd.resize(900, 500)
        wnd.show()
        sys.exit(app.exec_())

  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,

    Si ta deuxième colonne est vide if faut que tu vérifies la donnée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            for i in range(lignes):
                for j in range(columns):
                    print data[i][j], type(data[i][j])
                    item = QtGui.QTableWidgetItem(data[i][j])
    Autre chose, tu crées ta table dans une autre table, pourquoi ?
    Ta MainWindow doit hériter de QMainWindow et pas de QTableWidget.

  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
    Bonjour,

    tu crées ta table dans une autre table, pourquoi ?
    Simplement parce que avec seulement un mois d'expérience en Python, Qt, j'ai cherché quelque chose de simple. j'ai essayé un QTableView (sans succès), j'ai encore du mal à bien comprendre ce système de vue et modéle. Je n'ai pas réussi à remplir le tableau via ma base de donnée donc j'ai cherché autre chose et j'ai trouvé le QtableWidget.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Si ta deuxième colonne est vide if faut que tu vérifies la donnée.
    Lorsque je fait :
    [QUOTE] print data[i][j], type(data[i][j])QUOTE]
    J'ai bien srtext type str et mon srid type int. Les deux colonnes sont bien affiché dans ma console, mais le sird ne s'affiche toujours pas dans la table.

    Ta MainWindow doit hériter de QMainWindow et pas de QTableWidget.
    Si je la fait hérité de QMainWindow, j'ai plus aucun résultat´à l'affichage de la table. Juste une fenetre vide.

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voilà un petit code de test donné à titre de source d'inspiration. Il utilise un QTableView pour afficher une table d"une base de données.

    Il suffira de changer le nom de la base de données, le nom de la table, et de réécrire les fonctions ouvrebaseqt et fermebaseqt en fonction du type de base utilisé (j'utilise ici sqlite3).

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 2.7, PyQt4
     
    import sys, os
    from PyQt4 import QtCore, QtGui, QtSql
     
    #############################################################################
    def ouvrebaseqt(basesql, contrainte=True):
        """ouvre la base 'basesql' et renvoie la connexion (None si échec)"""
     
        # tentative d'ouverture de la base
        db = QtSql.QSqlDatabase.addDatabase(u"QSQLITE")
        db.setDatabaseName(basesql)
        if not db.open():
            db = None
     
        # activation des contraites d'intégrité référentielles
        if (db != None) and contrainte:
            query = QtSql.QSqlQuery(db)
            req = u"PRAGMA foreign_keys=on;"
            if not query.exec_(req):
                query.finish()    # désactive le curseur
                query = None
                fermebaseqt(db)  # fermeture de la base
                db = None             
            if query != None:
                query.finish()    # désactive le curseur
     
        # renvoi de la connexion ouverte (ou None si échec)
        return db
     
    #############################################################################
    def fermebaseqt(db):
        if db!=None:
            db.close()
     
    #############################################################################
    class VoirTableSql(QtGui.QMainWindow):
     
        def __init__(self, basesql, nomtable, parent=None):
            super(VoirTableSql, self).__init__(parent)
     
            self.setWindowTitle(u"Affichage de la table %s" % (nomtable,))
            self.resize(800, 600)
     
            # ouverture de la base SQL
            self.basesql = basesql
            self.db = ouvrebaseqt(self.basesql)
            if self.db == None:
                self.close()
     
            # table à afficher
            self.nomtable = nomtable    
     
            # création du modèle et de sa liaison avec la base SQL
            self.model = QtSql.QSqlRelationalTableModel(self, self.db)
            # stratégie en cas de modification de données par l'utilisateur
            self.model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
     
            # création de la table et de son lien avec le modèle
            self.vuetable = QtGui.QTableView(self)
            self.vuetable.setModel(self.model)
            self.vuetable.setItemDelegate(QtSql.QSqlRelationalDelegate(self.vuetable))
            # activer le tri en cliquant sur les têtes de colonnes
            self.vuetable.setSortingEnabled(True)
     
            # positionnement du QTableView dans la fenêtre
            self.setCentralWidget(QtGui.QFrame())
            posit = QtGui.QGridLayout()
            posit.addWidget(self.vuetable, 0, 0)
            self.centralWidget().setLayout(posit)
     
            # affiche la table demandée
            self.model.setTable(self.nomtable)
            self.model.select() # peuple le modèle avec les données de la table
     
            # tri si nécessaire selon la colonne 0
            self.model.sort(0, QtCore.Qt.AscendingOrder) # ou DescendingOrder
     
            # ajuste la largeur des colonnes en fonction de leurs contenus
            self.vuetable.resizeColumnsToContents()
     
        #========================================================================
        def closeEvent(self, event=None):
            """Méthode appelée automatiquement à la fermeture de la fenêtre"""
            #fermeture de la base
            fermebaseqt(self.db)
            event.accept()
     
    #############################################################################
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
     
        basesql = u"mabase.db3"
        nomtable = u"photos"
     
        fen = VoirTableSql(basesql, nomtable)
        fen.show()
        sys.exit(app.exec_())
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  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
    Salut tyrtamos,

    Juste avant que je regarde cet exemple de plus près, j'ai une petite question. Sqlite3 permet d'accéder à tous les types de base de données ? Je suis sous postgresql, j'ai l'habitude de travailler avec psycopg2.

    Merci pour l'aide en tout cas !

  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
    Tu ne m'as pas compris, je parle de la fenêtre entière, le QTableWidget c'est OK mais tu fais hériter ta main window aussi d'un QTableWidget c'est ça qui ne va pas.

    Si tu ne vois rien dans ta QMainWindow c'est parce qu'il faut utiliser un centralWidget.
    comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class MainWindow(QtGui.QMainWindow):
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent)
            self.widget = QtGui.QWidget()
            layout = QtGui.QVBoxLayout(self.widget)
            self.table_widget = QtGui.QTableWidget() # Créer la table
            self.table_widget.cellClicked.connect(self.returnIndex)
            layout.addWidget(self.table_widget)
            self.setCentralWidget(self.widget)
     
            self.sridData()
    Pour ta deuxième colonne, tu dis que la donnée est un type int et la doc dit que ce doit être un type str, alors convertis d'abord.

  7. #7
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par aurelie.guegan.15 Voir le message
    Juste avant que je regarde cet exemple de plus près, j'ai une petite question. Sqlite3 permet d'accéder à tous les types de base de données ? Je suis sous postgresql, j'ai l'habitude de travailler avec psycopg2
    Sqlite3 est un système de gestion de base de données relationnelle comme postgresql ou mysql, à part que ce n'est pas un serveur: on l'utilise dans le cadre d'un programme en accès unique (il n'est pas prévu d'accès multiples). Il est aussi moins puissant en terme de fonctionnalités, mais il est très rapide et très pratique à utiliser. D'autant plus qu'il est donné avec Python (le logiciel + son pilote). Même s'il en est resté à la norme SQL92, il supporte de nombreuses fonctionnalités relationnelles. Je l'utilise pour une base de données de plus de 5000 articles, une vingtaine de tables avec des contraintes de clé étrangères, des triggers, des filtrages, des tris, des extractions complexes, des exportations en csv, etc... Les réponses sont quasi instantannées.

    Pour ton application, si postgresql te convient, garde le: il est très bien. il suffira pour adapter mon programme test de modifier ce que j'ai dit.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  8. #8
    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 Affichage résolu
    Citation Envoyé par VinsS Voir le message
    Pour ta deuxième colonne, tu dis que la donnée est un type int et la doc dit que ce doit être un type str, alors convertis d'abord.
    Après avoir convertis mes données en str, tout s'affiche.

    Je pense que mon problème d'affichage des données dans le "désordre" vient du fait qu'elles sont en fait rangés par ordre alphabétique dans ma table_widget, alors que dans ma base de donnée elle sont pas du tout classés. La question est mais pourquoi donc ? Python reste un peu mytérieux pour moi, c'est la magie de la chose

  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
    Citation Envoyé par VinsS Voir le message
    Si tu ne vois rien dans ta QMainWindow c'est parce qu'il faut utiliser un centralWidget.
    "La théorie" marche d'enfer ! Le code simple pour afficher la mes deux colonnes et faire une selection dessus marche.

    Mais maintenant je veux le mettre dans mon réel plugin Le principe est simple. Un pushButton qui une fois cliqué ouvre ma table. Sauf que une fenetre vide s'ouvre, sans afficher mes données. Un petit coup d'oeil sur mon code serait pas de refus !
    En passant je prend toutes les remarque et correction concernant l'optimisation du code car j'ai rien fait. J'apprend plus que je code pour le moment

    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
    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(object):
        def setupUi(self, Main):
            #UI
            Main.setObjectName(_fromUtf8("Main"))
            Main.resize(400, 251)
            self.label_menu = QtGui.QLabel(Main)
            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(Main)
            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(Main)
            QtCore.QObject.connect(self.pushButton_Cancel,QtCore.SIGNAL(_fromUtf8("pressed()")), Main ,QtCore.SLOT("close()"))
            QtCore.QObject.connect(self.pushButton_Download, QtCore.SIGNAL(_fromUtf8("clicked()")), Main, QtCore.SLOT("close()"))
            QtCore.QObject.connect(self.pushButton_PostGIS, QtCore.SIGNAL(_fromUtf8("pressed()")), Main, QtCore.SLOT("close()"))
            QtCore.QMetaObject.connectSlotsByName(Main)
     
            #SIGNAUX Actions
            self.pushButton_Download.clicked.connect(self.uiDownload)
     
        def retranslateUi(self, Main):
            Main.setWindowTitle(_translate("Main", "Menu Dataconnect", None))
            self.label_menu.setText(_translate("Main", "Plugin DataConnect", None))
            self.pushButton_Download.setText(_translate("Main", "Download new file", None))
            self.pushButton_PostGIS.setText(_translate("Main", "Open PostGIS", None))
            self.pushButton_Cancel.setText(_translate("Main", "Cancel", None))
     
            #Call Window download
        def uiDownload(self):
            """Open the window ui_download"""
            Dialog = QtGui.QDialog()
            self.uidownload = ui_download.Ui_Download()
            self.uidownload.setupUi(Dialog, self)
            reply = Dialog.exec_() 
     
            #Call The proganne postGRIS
        def loadPostGIS(self):
            """ load data base"""
     
     
    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        MainWindow = QtGui.QMainWindow()
        ui = Ui_Main()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())
    Fenetre 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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    import sys
    from PyQt4 import QtCore
    from PyQt4 import QtGui
     
    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(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)
     
        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):
            pathfile = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/home')
            correctedpathfile= pathfile.replace('\\', '/')
            self.lineEdit_pathfile.setText(str(correctedpathfile))
     
        def uiImportation(self):
            WindowDownload = QtGui.QDialog()
            self.uimportation = ui_load.Ui_Dialog()
            self.uimportation.setupUi(WindowDownload, self)
            self.close()
            reply = WindowDownload.exec_()
     
        def uiSrid(self):
            WindowDownload = QtGui.QDialog()
            self.uisrid = ui_srid.Ui_Srid()
            self.uisrid.setupUi(WindowDownload, self)
            self.close()
            reply = WindowDownload.exec_()
    Table :
    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
     
    # -*- coding: utf-8 -*-
    import psycopg2
    import sys
    from PyQt4 import QtCore, QtGui
    from PyQt4.QtGui import *
    from PyQt4.QtCore import SIGNAL, Qt
     
     
    con = None
     
    class Ui_Srid(QtGui.QMainWindow):
     
        def __init__(self, parent=None):
            super(Ui_Srid, self).__init__(parent)
     
        def setupUi(self,Ui_Srid,Main):
            self.widget = QtGui.QWidget()
            layout = QtGui.QVBoxLayout(self.widget)
            self.table_widget = QtGui.QTableWidget() # Créer la table
            self.table_widget.cellClicked.connect(self.returnIndex)
            layout.addWidget(self.table_widget)
            self.setCentralWidget(self.widget)
            self.sridData()
     
        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()
            #data =str(data)
     
            lignes = len(data)
            columns =  len(data[0])
            i = 0
            j = 0
            self.table_widget.setRowCount(lignes)
            self.table_widget.setColumnCount(columns)
            self.table_widget.setHorizontalHeaderLabels(['Label sird', 'srid'])
            self.table_widget.horizontalHeader().setResizeMode(0, QHeaderView.Stretch)
     
            for i in range(lignes):
                for j in range(columns):
                    item = QtGui.QTableWidgetItem(data[i][j])
                    self.tabledata = self.table_widget.setItem(i, j, item)
     
        def returnIndex(self,row,column):
            row =row 
            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 auth_srid FROM spatial_ref_sys;")
            srid = cur.fetchall()
            srid = srid[row]
            print row, srid

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

Discussions similaires

  1. MAJ d'un fichier texte par une requête sql
    Par kayserfc dans le forum VB.NET
    Réponses: 2
    Dernier message: 24/12/2009, 08h39
  2. Modifier ou supprimer un enregistrement par une requête SQL
    Par afatdz dans le forum Bases de données
    Réponses: 6
    Dernier message: 29/09/2008, 09h01
  3. Format d'une date récupérée par une requête sql
    Par ZIED dans le forum Zend Framework
    Réponses: 4
    Dernier message: 24/03/2008, 23h17
  4. Enlever l'unicité par une requète SQL
    Par philnext dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/06/2007, 14h22
  5. Réponses: 1
    Dernier message: 04/06/2007, 10h23

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