python qml list
时间: 2025-02-12 21:18:42 浏览: 57
### Python与QML结合使用中的列表操作
在Python与QML结合使用的场景下,通常会通过PySide或 PyQt库来实现交互。对于列表的操作,可以利用这些框架提供的接口,在C++和Python之间传递数据结构。
#### 使用 PySide 将 Python 列表暴露给 QML
为了使Python列表能够在QML中被访问并操作,可以通过创建一个Python类并将其实例注册到QML环境中[^1]:
```python
from PySide6.QtCore import QObject, Signal, Slot, Property, QStringListModel
import sys
from PySide6.QtWidgets import QApplication
from PySide6.QtQml import QQmlApplicationEngine
class ListProvider(QObject):
def __init__(self):
super().__init__()
self._list_model = QStringListModel()
self._items = ["Item 1", "Item 2", "Item 3"]
self._list_model.setStringList(self._items)
@Property('QStringListModel', constant=True)
def list_model(self):
return self._list_model
@Slot(str)
def add_item(self, item):
items = self._list_model.stringList()
items.append(item)
self._list_model.setStringList(items)
if __name__ == "__main__":
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
provider = ListProvider()
context = engine.rootContext()
context.setContextProperty("provider", provider)
engine.load("main.qml")
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec())
```
此代码片段展示了如何定义一个`ListProvider`类用于管理字符串类型的列表,并将其作为属性提供给QML环境。此外还实现了添加新项的方法 `add_item()` ,该方法接收来自QML界面的新条目并更新模型。
#### 对应的QML文件 (main.qml)
下面是一个简单的QML布局例子,它显示了一个ListView控件以及一个TextField用来输入新的列表项目:
```qml
import QtQuick 2.15
import QtQuick.Controls 2.15
ApplicationWindow {
visible: true
width: 640; height: 480
Column{
anchors.centerIn: parent
ListView {
id: listView
model: provider.list_model
delegate: Text { text: modelData }
width: 200; height: 200
}
TextField {
placeholderText: qsTr("Enter new item...")
onAccepted: {
provider.add_item(text);
text = "";
}
}
Button {
text: qsTr("Add Item")
onClicked: {
var txtField = listView.parent.children[1];
provider.add_item(txtField.text);
txtField.text = "";
}
}
}
}
```
这段QML脚本设置了一个窗口组件,其中包含一个可滚动查看项目的视图(ListView),还有一个文本框(TextField)允许用户键入要加入列表的内容。当按下回车键(onAccepted事件触发)或是点击按钮时,就会调用Python端提供的`add_item`函数向列表里追加一项。
阅读全文
相关推荐

















