1

我是 Python 和 PyQt 的新手。我想知道如何使用 PyQt 连接到 Postgresql DB 并将其显示到网格窗口。我正在使用 Qt 设计器。有人可以帮我吗?谢谢你。

最好的问候, 内森

4

1 回答 1

2

PyQt 具有数据库支持(我个人没有使用过,所以我无法评论),但如果你查看 QDatabase,它应该是非常简单的文档。如果您的应用程序的 api 始终可以访问 Qt,这可能是最好的方法,因为它们还有一些用于映射到接口的附加模型。

另一种选择是使用 Python ORM(对象关系映射器),例如 Django、SQLAlchemy 或storm,并定义您的表(模型)并将它们手动加载到您的设计器界面中。

我个人的做法是,我实际上构建了自己的 ORM,称为 ORB 和一个 PyQt 扩展库,称为 ProjexUI。ORB 库独立于 Qt,因此可以在非 Qt 项目中使用,ProjexUI 库包含映射以帮助在 Qt 小部件中使用数据库记录。

有关文档和更多信息,请查看: http: //www.projexsoftware.com

对于一个简单的示例,通过执行以下操作创建一个新的 UI 文件:

  • 加载 Qt 设计器
  • 创建一个新的 Qt 对话框
  • 拖放 QTreeWidget
  • 右键单击并执行“更改对象名称...”>“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 回答