Thanks Brian
I tried that and the checkboxes are showing the right value but I am
unable to edit the checkbox only the datarole. What am I doing wrong??
Code sample below.
from PyQt4.QtGui import *
from PyQt4.QtSql import *
from PyQt4.QtCore import *
import sys
class MyModel(QSqlRelationalTableModel, QStandardItemModel):
def data(self, index, role=Qt.DisplayRole):
qv = QSqlRelationalTableModel.data(self, index, role)
if not index.isValid():
return QVariant()
elif index.column() in [1]:
if role == Qt.CheckStateRole:
it = QSqlRelationalTableModel.data(self, index,
0)
if it.toInt()[0] == 1:
return QVariant(Qt.Checked)
else:
return QVariant(Qt.Unchecked)
else:
return QVariant()
elif role == Qt.DisplayRole:
return qv
else:
return QVariant()
def flags(self, index):
if index.column() in [1]:
return Qt.ItemIsEnabled|Qt.ItemIsUserCheckable|
Qt.ItemIsSelectable|Qt.ItemIsEditable
else:
return
Qt.ItemIsEnabled|Qt.ItemIsEditable|Qt.ItemIsSelectable
def setData(self, index, value, role):
if index.isValid():
record = self.record(index.row())
if role == Qt.EditRole:
if value == Qt.Checked:
record.setValue(index.column(),
QVariant(1))
else:
record.setValue(index.column(),
QVariant(0))
self.emit(SIGNAL("dataChanged(QModelIndex,QModelIndex)"),index,
index)
return True
return False
class Form(QDialog):
def __init__(self, parent=None):
super(Form,self).__init__(parent)
self.timeSeriesModel = MyModel(self) # links data to data aware
widget
self.timeSeriesModel.setTable("TimeSeries")
self.timeSeriesModel.setRelation(2,
QSqlRelation("AnimalMovement",
"AnimalMovementId", "AnimalMovement"))
self.timeSeriesModel.setData
self.timeSeriesModel.select()
self.tvTest = QTableView(self)
self.tvTest.setGeometry(QRect(10,0,1400,200))
self.tvTest.setModel(self.timeSeriesModel)
self.tvTest.setSelectionMode(QTableView.SingleSelection)
self.tvTest.setSelectionBehavior(QTableView.SelectRows)
self.tvTest.setItemDelegate(QSqlRelationalDelegate(self.tvTest))
def createConnection():
db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName(":memory:")
if not db.open():
return False
query = QSqlQuery()
query.exec_("CREATE TABLE AnimalMovement("
"AnimalMovementId INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT
NULL, "
"AnimalMovement VARCHAR(20) NOT NULL"
")")
query.prepare("INSERT INTO AnimalMovement(AnimalMovement) VALUES
(?)")
animalMovementData = ['Swim to', 'Swim away', 'Swim parallel']
for animalMovement in animalMovementData:
query.addBindValue(QVariant(QString(animalMovement)))
query.exec_()
query.exec_("CREATE TABLE TimeSeries("
"TimeSeriesId INTEGER PRIMARY KEY AUTOINCREMENT
UNIQUE NOT NULL, "
"First INTEGER NULL, "
"AnimalMovementId INTEGER NULL CONSTRAINT
fk_animal_movement
REFERENCES AnimalMovement(AnimalMovementId) "
")")
query.prepare("INSERT INTO TimeSeries(First, AnimalMovementId)
VALUES (?, ?)")
timeSeriesData = [[1, 1], [0, 2], [1, 2]]
for first, animalMovementId in timeSeriesData:
query.addBindValue(QVariant(first))
query.addBindValue(QVariant(animalMovementId))
query.exec_()
return True
if __name__ == "__main__":
app = QApplication(sys.argv)
if not createConnection():
QMessageBox.warning(None, "Database", QString("Database error:
%l").arg(db.lastError().text()))
sys.exit(1)
form = Form()
form.show()
sys.exit(app.exec_())
On 26/01/2008, Brian Kelley <[EMAIL PROTECTED]> wrote:
in the model's data method:
def data(index, role):
...
if role == QtCore.Qt.CheckStateRole:
return QtCore.Qt.Checked # or UnChecked
Note you can have a checkbox along with the datarole as well.
On Jan 18, 2008, at 12:10 AM, Catriona Johnson wrote:
Hello
How do I implement a checkbox in a QTableView column that
retreives/stores values in a database?
Also, I have one model with columns say abc and I have two
QTableViews
of this model that show the columns in different orders - bca and
cab.
How do I change the column order in the QTableView?
Thanks
_______________________________________________
PyQt mailing list PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt