2

我昨天发布了一个与此类似的问题,dschulz 友好地回应,将我引向一些在线文章。不幸的是,我仍然在苦苦挣扎,因为任何一个示例代码都是用 C++ 编写的,而我使用的是 Python(尽管我认为我已经设法进行了必要的调整),这些示例对我来说还不够完整,或者代码只是不工作。我是编程新手,所以通过我正在制作的这个软件工作进展非常缓慢。

我在 Quantum GIS 中创建了一个插件,可以执行各种空间分析。单击该插件后,将打开一个 GUI,其中包含与 4 个单独分析相关的 4 个选项卡。在一个选项卡中,我希望有一个表视图,显示我在 Postgres 中的表的查询结果。有一个“计算”按钮,一旦单击该按钮,就会运行查询以使用同一选项卡上的一些输入来更新数据库。在任何时候,我都希望在这个按钮旁边有一个表格视图,显示这个表格中发生的事情。

我一直在使用 QT Designer 来制作 GUI,所以我已经弄清楚如何拖放小部件,如滑块和复选框,这些小部件在更改时会触发事件。我找到了“表格视图”小部件,但不知道如何将其链接到 postgres 数据库中的查询。表视图将是我假设的信号的接收器,但我无法识别似乎在表视图中显示 Postgres 查询的“插槽”。我在成功创建 QSqlQueryModel 时也遇到了麻烦。到目前为止我所拥有的是这个。

try:
      db = QSqlDatabase.addDatabase("QPSQL")
      db.setHostName("localhost")
      db.setDatabaseName("database")
      db.setUserName("postgres")
      db.setPassword("password")
      db.open()
  except:
      #This exception does not run so I assume the link to the database worked out.
      QMessageBox.information(None, "Cancel", "Cannot Connect to Database to create table view.")
      return

  try:
      model = QSqlQueryModel()
      model.setQuery("SELECT name, density, deveff FROM susip." +str(filename)+ "_rezoning")          
  except:
      #Here the exception runs, which tells me that something is wrong with the setQuery function
      QMessageBox.information(None, "Cancel", "Cannot connect run query in database to create table view.")
      return

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

通过单击“计算”按钮运行此操作并注释掉 model.seta 新窗口会短暂闪烁然后消失。但是,即使这确实有效,我也不知道如何让这个表格视图出现在我放置在 gui 中的表格视图小部件中。其次,我不明白查询出了什么问题以及为什么“try”语句失败并给了我提供 QMessageBox 的“except”语句。

我无休止地搜索在线文档,完全迷失了方向。有人可以告诉我我做错了什么吗?

太感谢了,

罗马

4

0 回答 0