pyside6 qml tableviewpyside6 qml tableview
时间: 2025-01-03 07:34:30 浏览: 19
### PySide6 QML TableView 示例
#### 使用 `QQmlApplicationEngine` 加载 QML 文件并集成 `QTableView`
为了在 PySide6 中使用 QML 实现 `TableView`,可以采用 `QQmlApplicationEngine` 来加载 QML 文件,并通过 Python 代码设置数据模型。下面是一个完整的例子来展示这一过程。
```python
import sys
from PySide6.QtCore import Qt, QStringListModel, QModelIndex
from PySide6.QtWidgets import QApplication
from PySide6.QtGui import QStandardItemModel, QStandardItem
from PySide6.QtQml import QQmlApplicationEngine
class TableViewModel(QStandardItemModel):
def __init__(self, parent=None):
super().__init__(parent)
# 设置表头
headers = ["Column 1", "Column 2"]
self.setHorizontalHeaderLabels(headers)
# 添加一些初始数据
data = [
['Item A', 'Value X'],
['Item B', 'Value Y']
]
for row in data:
items = [QStandardItem(item) for item in row]
self.appendRow(items)
if __name__ == "__main__":
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
model = TableViewModel()
context = engine.rootContext()
context.setContextProperty("pyTableModel", model)
engine.load('main.qml')
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec())
```
对应的 QML 文件 (`main.qml`) 如下:
```qml
import QtQuick 2.15
import QtQuick.Controls 2.15
import Qt.labs.qmlmodels 1.0
ApplicationWindow {
visible: true
width: 800
height: 600
TableView {
id: tableView
anchors.fill: parent
model: pyTableModel
TableViewColumn { role: "display"; title: "Column 1"; width: 200 }
TableViewColumn { role: "display"; title: "Column 2"; width: 200 }
onDoubleClicked: console.log(model.get(index).data(Qt.DisplayRole))
}
}
```
此示例展示了如何利用 `QQmlApplicationEngine` 将 Python 数据传递给 QML 并显示在一个简单的表格视图中[^1]。
对于更复杂的数据绑定场景,比如动态更新表格内容或处理大量数据项,则可能需要进一步定制化 `TableViewModel` 类以及调整相应的 QML 布局逻辑[^3]。
阅读全文