1

私はPythonとPyQtの初心者です。PyQtを使用してPostgresqlDBに接続し、グリッドウィンドウに表示する方法を知りたいのですが。QtDesignerを使用しています。誰かがこれについて私を助けることができますか?ありがとうございました。

よろしく、ネタン

4

1 に答える 1

2

PyQt にはデータベース サポートがあります (個人的には使用したことがないため、コメントできません) が、QDatabase を見れば、かなり簡単なドキュメントであるはずです。アプリケーションの API が常に Qt にアクセスできる場合、インターフェイスにマッピングするための追加のモデルもいくつかあるため、これが最善のアプローチである可能性があります。

もう 1 つの方法は、Django、SQLAlchemy、または storm などの Python ORM (オブジェクト リレーショナル マッパー) を使用して、テーブル (モデル) を定義し、デザイナー インターフェイスに手動でロードすることです。

私が個人的に行っている方法は、ORB と呼ばれる独自の ORM と ProjexUI と呼ばれる PyQt 拡張ライブラリを実際に構築したことです。ORB ライブラリは Qt に依存しないため、Qt 以外のプロジェクトでも使用できます。ProjexUI ライブラリには、Qt ウィジェットでデータベース レコードを使用するのに役立つマッピングが含まれています。

ドキュメントと詳細については、http: //www.projexsoftware.comをご覧ください。

簡単な例として、次のようにして新しい UI ファイルを作成します。

  • Qt デザイナーを読み込む
  • 新しい Qt ダイアログを作成する
  • QTreeWidget をドラッグ アンド ドロップする
  • 右クリックして、'Change objectName...' > 'uiOrbTREE' を実行します。
  • ウィジェットを右クリックし、[昇格...] を選択します。
    • 基本クラス名はそのままにしておきます (QTreeWidget)
    • 「昇格したクラス名」を「XOrbTreeWidget」に設定します
    • 「ヘッダー ファイル」を「projexui.widgets.xorbtreewidget」に設定します。
    • [追加] をクリックしてから [昇格] をクリックします。
  • ベース ダイアログを選択し、[グリッドにレイアウト] をクリックします。
  • UI ファイルを保存します (コードでは UI_FILE と呼びます)。

これにより、PyQt インターフェイス部分が作成されます。次に、インターフェイスをデータベース バックエンドに接続する必要があります。ORB でこれを行う方法の最も簡単な例は次のとおりです。

# import the projexui and orb libraries
import projexui
import orb

# import PyQt modules
import PyQt4.QtGui
import PyQt4.uic

# create our database model
class User(orb.Table):
    __db_columns__ = [
        orb.Column( orb.ColumnType.String, 'username' ),
        orb.Column( orb.ColumnType.String, 'password' ),
        orb.Column( orb.ColumnType.Boolean, 'isActive' )
    ]

# the above model will by default create a PostgreSQL table called default_user with
# the fields _id, username, password and is_active.  All of this is configurable, but
# you should read the docs for more info

# create the database information
db = orb.Database('Postgres', DATABASE_NAME) # set your db name
db.setUsername(USER_NAME) # set your db user name
db.setPassword(PASSWORD)  # set your password
db.setHost('localhost')   # set your host
db.setPort(5432)          # set your port

# register the database
orb.Orb.instance().registerDatabase(db)

# sync the datbase (this will create your tables, update columns, etc.)
# NOTE: this should not always be called, it is here as an example
db.sync( dryRun = False ) # dryRun will just output the SQL calls

#-----------------------------
# End Database Code
#-----------------------------

class ExampleDialog(QtGui.QDialog):
    def __init__( self, parent = None ):
        super(ExampleDialog, self).__init__(parent)

        # load your UI file
        PyQt4.uic.loadUi(UI_FILE, self) # use the UI_FILE you saved

        # connect the tree to the model
        self.uiOrbTREE.setTableType(User)

        # that is all you have to do to link the tree to the model and vice-versa,
        # this is the most simple example of how to do this - you can do more as far
        # as linking queries and sorting and such, but you should read the docs on
        # the site

# launch as an application
if ( __name__ == '__main__' ):
    # always check for an existing application first!
    app = None
    if ( not QtGui.QApplication.instance() ):
        app = QtGui.QApplication(sys.argv)

    dialog = ExampleDialog()
    dialog.show()

    # execute the app if we created it
    if ( app ):
        app.exec_()
于 2012-08-01T05:59:46.227 に答える