1

我正在使用 Postgres 作为后端和 QT Designer 来制作 GUI 的 Quantum GIS 中创建一个插件。我正在使用 psycopg2 在数据库中运行脚本,甚至获取查询结果以在 GUI 中设置标签的值。这东西对我来说很好用。

在通过单击“计算”按钮运行一些查询之后,我现在想做的是将结果表作为 TableView 显示在插件中。我知道有小部件专门用于查看表格,但我不太清楚如何去做。我不确定我应该使用 psycopg2 还是 PySide,因为我在网上看到的大多数示例都使用后者。

我想知道是否有人可以告诉我应该使用 psycopg2 和 PySide 之间的哪个来创建 TableView。其次,我想知道 TableView 小部件的“信号”应该是什么,以在 Postgres 中显示查询结果。最后,是否有人可以提供一些关于如何设置代码的说明,将不胜感激!

干杯,

罗马

我已经继续尝试遵循 PyQt 文档,但由于它是用 C++ 提供的,而且我只是使用 Python 的初学者程序员,我不确定我是否已经掌握了对代码语法的所有必要修改。无论如何,这就是我到目前为止所拥有的:

db = QSqlDatabase.addDatabase("database")
  db.setHostName("localhost")
  db.setUserName("postgres")
  db.setPassword("password")
  #Not sure what to do to set the connection. The C++ documentation says to put "bool ok = db.open();"

  model = QSqlQueryModel()
  model.setQuery("SELECT name, density, deveff FROM public." +str(filename)+ "_rezoning ORDER BY gid;")
  model.setHeaderData(0, Qt.Horizontal, "Name")
  model.setHeaderData(1, Qt.Horizontal, "Density")
  model.setHeaderData(2, Qt.Horizontal, "DevEff")

  view = QTableView()
  view.setModel(model)
  view.show()

当我单击 GUI 中的按钮运行计算时会发生什么,一个小的空白 QGIS 窗口短暂闪烁并消失。至少我没有收到错误,但它显然不完整。我认为部分问题是与数据库的连接丢失并且我不知道如何设置。另一个问题是我希望它显示在 GUI 的 tableView 小部件中,但我不确定如何指定它......

任何进一步的提示?对此,我真的非常感激。

罗马

4

1 回答 1

2

If you're planning to use Qt widgets and models, PySide (PyQt, or plain Qt/C++) is the way to go.

With bare psycopg2 you'll have a lot more work to do, and you'll need to implement your own model in order to leverage Qt's model/view classes. This is simply not the Qt way of doing things. PySide (and PyQt) has it own means to connect to a supported database, there's no need for pure Python database adapters like psycopg2. It uses the underlying libqt4-sql library (C++) and the installed plugins (QPSQL, QMYSQL, QSQLITE, etc).

Essentially you need to:

  1. Connect to a database.
  2. Instantiate a model (QSqlQueryModel, QSqlTableModel or a custom QAbstractTableModel derived class)
  3. Attach that model to a view (ie. QTableView).

Take a look at the PySide QtSql Documentation and the PyQt documentation to get an idea. They're mostly compatible/interchangeable, but at a glance I see that the PyQt documentation looks more complete.

EDIT (after your edit): A Qt GUI application requires an event loop to run, and that's provided by a QApplication instance. Before going any further with the specifics of your app, take the time to understand a few basic concepts first. Here's a nice Getting Started with PyQt Guide.

于 2012-04-16T04:49:35.857 回答