1

Postgres をバックエンドとして使用し、QT Designer を使用して GUI を作成する Quantum GIS でプラグインを作成しています。私はpsycopg2を使用してデータベースでスクリプトを実行し、クエリの結果を取得してGUIでラベルの値を設定しています。このようなものは私にとってはうまくいっています。

「計算」ボタンをクリックしていくつかのクエリを実行した後、私が今やりたいことは、結果のテーブルをプラグインで TableView として表示することです。テーブルを表示する目的で明示的にウィジェットが存在することは知っていますが、その方法がわかりません。オンラインで見たほとんどの例では後者を使用しているため、psycopg2 または PySide を使用する必要があるかどうかはわかりません。

TableView を作成するために psycopg2 と PySide のどちらを使用する必要があるかを誰かに教えてもらえないかと思っています。次に、Postgres でクエリの結果を表示するために、TableView ウィジェットへの「シグナル」はどうあるべきか疑問に思っています。最後に、誰でもコードの設定方法を教えていただけると助かります。

乾杯、

ローマン

私は先に進んで 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 ウィンドウが一瞬点滅して消えます。少なくともエラーは発生していませんが、明らかに完全ではありません。問題の一部は、欠落しているデータベースへの接続であり、設定方法がわからないことだと思います。もう1つの問題は、これをGUIのtableViewウィジェットに表示したいのですが、これを指定する方法がわかりません...

さらにヒントはありますか?ほんとうにありがとう。

ローマン

4

1 に答える 1

2

Qt ウィジェットとモデルの使用を計画している場合は、PySide (PyQt、またはプレーンな Qt/C++) が最適です。

ベアでpsycopg2は、やるべきことがたくさんあり、Qt のモデル/ビュー クラスを利用するには、独自のモデルを実装する必要があります。これは単に Qt のやり方ではありません。PySide (および PyQt) には、サポートされているデータベースに接続するための独自の手段があり、のような純粋な Python データベース アダプターは必要ありませんpsycopg2。基礎となる libqt4-sql ライブラリ (C++) とインストールされたプラグイン (QPSQL、QMYSQL、QSQLITE など) を使用します。

基本的に、次のことを行う必要があります。

  1. データベースに接続します。
  2. モデルのインスタンス化 (QSqlQueryModel、QSqlTableModel、またはカスタム QAbstractTableModel 派生クラス)
  3. そのモデルをビュー (つまり、QTableView) にアタッチします。

PySide QtSql DocumentationPyQt documentationを見て、アイデアを得てください。それらはほとんど互換性/互換性がありますが、一見すると、PyQt のドキュメントの方が完全に見えることがわかります。

編集 (編集後): Qt GUI アプリケーションを実行するにはイベント ループが必要であり、それはQApplicationインスタンスによって提供されます。アプリの詳細に進む前に、時間をかけていくつかの基本的な概念を理解してください。これは、PyQt ガイドの優れた入門ガイドです。

于 2012-04-16T04:49:35.857 に答える