如何在PyQt中显示数据库文件数据,以便用户可以添加/删除/编辑数据?

1 投票
2 回答
4849 浏览
提问于 2025-04-18 04:04

我用Python的SQL命令创建了一个数据库文件。我用了很多外键,但我不太确定怎么把这些数据在Qt上显示出来。有没有什么想法?我还希望用户能够添加、编辑和删除数据。

2 个回答

1

这个问题有点宽泛,不过我还是尽量来回答一下。Qt确实提供了一些可以连接到数据库的模型,特别是像 QSqlTableModel 这样的类。如果你把这样的模型连接到你的数据库,并将其设置为 QTableView 的模型,那么它应该能满足你大部分的需求。

不过,我觉得我也没法给出更具体的建议了。一旦你写了一些代码,欢迎随时提出一个关于具体问题的新问题(记得附上示例代码哦!)

3

因为这个问题有点宽泛和一般,所以建议你先去看看这个网站:http://zetcode.com/gui/pyqt4/,这会对你入门有很大帮助。一旦你了解了自己在做什么,就可以用QtDesigner来制作用户界面,并在那里面为你的事件添加功能。不过要注意,每次你在Qt中编辑表单时,你之前添加的Python代码都会被删除,所以我建议你在项目中遵循MVC模式。

补充:这可能是你需要用来展示数据的一个大概念:把qttable看作是你类中的一个网格。

def fillQTable(self):
    #data = [('1','2','3','4'),('5','6','7','8')] #this is from database
    data = self.getData()
    rowCount = len(data)
    colCount = 4
    self.qttable.setRowCount(rowCount)
    self.qttable.setColumnCount(colCount)
    self.qttabke.verticalHeader().setVisible(False)
    self.qttabke.setHorizontalHeaderLabels(QString("num1;num2;num3;num4").split(";"))
    self.qttabke.horizontalHeader().setVisible(True)
    for s in range(colCount):
        self.qttable.horizontalHeaderItem(s).setTextAlignment(Qt.AlignLeft)
    for i, row in enumerate(data):
        for j, col in enumerate(row):
            item = QTableWidgetItem(col)
            self.qttabke.setItem(i, j, item)

def connectionDB(self):
    try:
        cnn=pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb)}\
                           ;DBQ=Data.mdb") # you can use the db library you like here
                                           # i have used pyodbc to connect to MS  Access db
        return cnn
    except Exception, e:
        print e

def getData(self):
    cnn = self.connectionDB()
    cursor = cnn.cursor()
    cursor.execute("select * from DataTable") # DataTable is a table in Data.mdb
    rawData = cursor.fetchall()
    cnn.commit()
    cnn.close()
    return rawData

撰写回答