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:
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_()) |