如何在PyQt中显示数据库文件数据,以便用户可以添加/删除/编辑数据?
我用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