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 :

Affichage des données PostGIS dans une QTableView


Sujet :

PyQt Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Affichage des données PostGIS dans une QTableView
    Bonjour !
    Voilà mon problème,
    j'ai des tables dans une BD PostGIS/PostgreSQL, je teste un petit programme en python qui doit faire ceci:
    - au lancement s'ouvre un premier formulaire avec deux boutons type "PushButton".
    - lorsque j'appuie sur le premier bouton, un deuxième formulaire doit s'ouvrir et afficher soit une table soit le résultat d'une requête dans une QTableView.
    (l'affichage du résultat doit se faire dans le deuxième formulaire et non dans le premier).
    Après plusieurs tentatives, la deuxième fenêtre s''affiche, mais sans les résultats.
    Merci de m'aider SVP !

    Ce code va être intégré à une autre application.


    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
     
    #!/usr/bin/env python
    # -*- coding: Utf-8 -*-
     
    import sys
    import os
    from PyQt4 import QtGui
    from PyQt4.QtGui import QMainWindow
    from PyQt4.QtGui import QDialog
    from PyQt4.QtGui import QColor
    from PyQt4 import QtCore, QtGui
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    from PyQt4.QtSql import *
     
     
    from FenDonnees import Ui_FenDonnees
    from Formulaire import Ui_Form
     
     
    class FenPrincipale(QtGui.QMainWindow):
        def __init__(self, parent=None):
            QWidget.__init__(self, parent)
            self.ui = Ui_Form()
            self.ui.setupUi(self)
     
     
            # Make Signal/Slot connections
            # Connect the button to the function below
            QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.buttonclick)
            QtCore.QObject.connect(self.ui.pushButton_2, QtCore.SIGNAL("clicked()"), self.buttonclick)
     
     
     
        def buttonclick(self):          
     
            global DBNAME
            DRIVER = "QPSQL"
            DBNAME = "bd"
            USER = "Med"
            PASSWD = "test"
            HOST = u"localhost"
            PORT = 5432
     
            DB = QSqlDatabase()
            DB = QSqlDatabase.addDatabase(DRIVER)
            DB.setDatabaseName(DBNAME)
            DB.setHostName(HOST)
            DB.setUserName(USER)
            DB.setPassword(PASSWD)
            DB.setPort(PORT)
            query = QSqlQuery()
            uri = QgsDataSourceURI()
            uri.setConnection(HOST, str(PORT), DBNAME, USER, PASSWD)  
            uri.setDataSource("Med",  "vtable", "geom")
            # Affichage des donnees ...........      
     
            if (DB.open()):
                QMessageBox.information(self, self.trUtf8("Titre de la fenêtre"), self.trUtf8("Bienvenue : "))
                query = QSqlQuery(DB)    
            else:
                DB.close()
                QMessageBox.warning(self, self.trUtf8("Titre de la fenêtre"), self.trUtf8("Désolé, UserName ou PassWord incorrecte !")) 
     
     
     
     
            query = QSqlQuery(DB)
            requete = """ select * from "Med"."Communes" """
            query=QSqlQuery(DB)
            query.exec_  ("drop table vtable")
            query.exec_  ("create table vtable as (" + requete + ")")
     
            print "c'est le choix des data !!!!!!!!!!"  
     
     
            self.model = QSqlQueryModel(self)
     
            self.model.setQuery(requete)
            self.model.select()  
     
            self.ui.tableView.setModel(self.model) 
            self.tableview = QtGui.QTableView()
            self.tableview.setModel(self.model)
            self.tableview.show()
     
     
            self.FT = FenDonnees(self)
            self.FT.exec_()
     
     
     
     
     
     
     
    class FenDonnees(QDialog, Ui_FenDonnees):
        """
        Class documentation goes here.
        """
        def __init__(self, parent = None):       
            self.parent = parent
    #       self.parent.vRequeteChoisie="aucun"
    #       self.parent.vAffichageChoisi="aucun"             
            QDialog.__init__(self, parent)
            self.ui=Ui_FenDonnees()
            self.setupUi(self)
     
     
    ## --------------- Fenetre de lancement ------------------------------------
     
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
     
        MainWindow = QtGui.QMainWindow()
        ui = FenPrincipale()
        ui.show()
        sys.exit(app.exec_())

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 478
    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 478
    Points : 9 278
    Points
    9 278
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    C'est trop difficile de te répondre sur un code qu'on ne peut pas exécuter parce qu'il n'a ni base de données ni les 2 fichiers ui. Par ailleurs, je ne connais pas PostGIS et je me rends pas compte des contraintes qu'il apporte.

    Je note cependant des choses curieuses:

    - les 2 boutons activent la même méthode, ce qui est possible, mais alors, pourquoi 2 boutons?

    - le même modèle est appliqué à 2 widgets: un QTableView issu du fichier ui, et un autre créé dans ce code?

    - ce dernier QTableView est créé sans parent et affiché par show: est-ce que c'est une fenêtre à part?

    - si ce n'est pas une fenêtre à part, pourquoi ce widget n'est-il pas positionné dans le QMainWindows par un layout?

    A mon avis, tu as plus un problème d'architecture de programme que de codage: raisonne par bloc logique et fait un schéma (ordinogramme) avant d'écrire des lignes de code.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/01/2012, 13h47
  2. Réponses: 1
    Dernier message: 26/02/2009, 22h05
  3. [MySQL] Aide pour affichage de donné recup dans une BD
    Par mitchb dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/05/2006, 11h38
  4. Insérer des données Excel dans une table ACCESS
    Par anikeh dans le forum Access
    Réponses: 4
    Dernier message: 21/12/2005, 22h42
  5. Insérer des données Excel dans une base Access ?
    Par MaTHieU_ dans le forum Access
    Réponses: 3
    Dernier message: 22/06/2005, 15h11

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