【发布时间】:2018-01-16 11:00:38
【问题描述】:
我创建了一个 QAbstactTableModel 子类并将其与 qml 中的 tableview 绑定。我需要对 python 文件而不是 c++ 做同样的事情。我怎样才能做到这一点。我不太了解python。表视图.py
from os import path
import PyQt5
from PyQt5.QtCore import *
from PyQt5.QtCore import pyqtProperty, QObject, pyqtSignal
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtCore import pyqtProperty, QCoreApplication, QObject, QUrl
from PyQt5.QtQml import qmlRegisterType, QQmlComponent, QQmlEngine, QQmlListProperty
from PyQt5.QtCore import QTimer, pyqtSignal,pyqtSlot
from PyQt5.QtQml import QQmlListProperty
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQuick import QQuickView
class TableModel(QAbstractTableModel):
def __init__(self, parent=None, *args):
super(TableModel, self).__init__()
self.datatable = None
def update(self, dataIn):
print ('Updating Model')
self.datatable = dataIn
def rowCount(self, parent=QModelIndex()):
return len(self.datatable.index)
def columnCount(self, parent=QModelIndex()):
return len(self.datatable.columns.values)
def data(self, index, role=Qt.DisplayRole):
if role == QtCore.Qt.DisplayRole:
i = index.row()
j = index.column()
return '{0}'.format(self.datatable.iget_value(i, j))
else:
return QtCore.QVariant()
def flags(self, index):
return QtCore.Qt.ItemIsEnabled
class MainWindow(QQuickView):
def __init__(self, parent=None):
super().__init__(parent)
self.tablemodel=TableModel()
self.rootContext().setContextProperty('PersonModel', self.tablemodel)
self.rootContext().setContextProperty('MainWindow', self)
self.setSource(QUrl('main.qml'))
myApp = QApplication(sys.argv)
ui = MainWindow()
ui.show()
sys.exit(myApp.exec_())
main.qml
import QtQuick 2.3
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
TableView {
id: idTableView
anchors.fill: parent
model: PersonModel
Component.onCompleted: {
console.log("column count", columnCount)
console.log("model column count", PersonModel.columnCount())
for (var i = 0; i < PersonModel.columnCount(); i++)
{
var myTableViewColumn;
var component = Qt.createComponent("MyTableViewColumn.qml")
if (component.status === Component.Ready)
{
myTableViewColumn = component.createObject();
}
if (null !== myTableViewColumn)
{
console.log("add column")
// myTableViewColumn.role = dataModel.modelRoles[i]
// myTableViewColumn.title = dataModel.modelRoles[i]
idTableView.addColumn(myTableViewColumn)
}
}
}
}
Button {
text: "click"
anchors.bottom: parent.bottom
onClicked: {
idTableView.addColumn(idColumnComponent)
}
}
Component {
id: idColumnComponent
TableViewColumn {
id: idColumn
}
}
}
当我运行此代码时,我收到类似 return len(self.datatable.index) 的错误 AttributeError: 'NoneType' 对象没有属性 'index'
【问题讨论】:
-
好的,所以你希望有人为你写代码?
-
很抱歉问题不完整
标签: python python-2.7 qt qml pyqt5