Python setData总是返回False
我在gui中使用自定义QTableView和自定义QSqlTableModel。 我想做的是定义一个slot markOneRead,当用户单击一行时,它会将布尔值变成false。我的数据库定义如下: 标题|…某些字段…|布尔函数 该数据库是一个Sqlite数据库 我想做的基本上是一个读/未读系统。当从未单击该行时,布尔值设置为True。单击该行时,布尔值将变为False 但我无法将布尔值转换为False。以下是我的工作:Python setData总是返回False,python,sqlite,pyqt,Python,Sqlite,Pyqt,我在gui中使用自定义QTableView和自定义QSqlTableModel。 我想做的是定义一个slot markOneRead,当用户单击一行时,它会将布尔值变成false。我的数据库定义如下: 标题|…某些字段…|布尔函数 该数据库是一个Sqlite数据库 我想做的基本上是一个读/未读系统。当从未单击该行时,布尔值设置为True。单击该行时,布尔值将变为False 但我无法将布尔值转换为False。以下是我的工作: def markOneRead(self, element):
def markOneRead(self, element):
"""Slot to mark an article read"""
new = self.tableau.model().index(element.row(), 12).data()
if new == "false":
return
else:
new_index = self.tableau.model().index(element.row(), 12)
print(self.modele.setData(new_index, False))
而且它总是打印False,所以setData方法不起作用
以下是我对模型的实现:
class ModelPerso(QtSql.QSqlTableModel):
def __init__(self):
super(ModelPerso, self).__init__()
def setQuery(self, query):
self.query = QtSql.QSqlQuery()
self.query.prepare(query.executedQuery())
self.query.exec_()
results = QtSql.QSqlTableModel.setQuery(self, self.query)
while self.canFetchMore():
self.fetchMore()
return results
def select(self):
results = QtSql.QSqlTableModel.select(self)
while self.canFetchMore():
self.fetchMore()
return results
def setData(self, index, value, role=QtCore.Qt.EditRole):
if role == QtCore.Qt.EditRole:
return super(QtSql.QSqlTableModel, self).setData(index, value, role)
你能帮我一个忙吗?也许我误解了什么,但是内部打印应该是self.tableau.model.setDatanew\u index,False,不是吗?这是一样的,因为self.tableau.model和self.modele返回相同的对象。你检查过数据返回值是布尔值吗?看起来您在if语句中将其视为字符串。作为一个字符串,您应该执行setDatasome_index,这很奇怪,因为typedata返回str。所以您是对的,返回值是一个字符串。但是在我的db sqlite中,字段是一个整数,sqlite中没有布尔类型。当我打开数据库时,有true或false作为值,其中应该是0和1。在代码的其他地方,我将这个值设置为True或False,sqlite应该自己进行转换。正如您所建议的,我尝试了setDatasome_index,False,但没有成功。我在sqlite和PyQt中缺少了一些东西。