我正在尝试使用QML(从源代码安装)玩PyQt 5.5。
这是我的main.qml
:
Window {
...
ComboBox {
objectName: "cmbTypeCompression"
width: 240
height: 26
model: ListModel {
id: cbItems
ListElement { text: "Banana" }
ListElement { text: "Apple" }
ListElement { text: "Coconut" }
}
...
}
这是我的代码.py
class GUI(QApplication):
self.app = QApplication([])
self.engine = QQmlApplicationEngine()
self.ctx = self.engine.rootContext()
self.ctx.setContextProperty("main", self.engine)
self.engine.load(URL)
self.loadForm()
self.loadSignal()
self.app.exec_()
def loadSignal(self):
obj = self.win.findChild(QObject, "btnSave")
obj.messageRequired.connect(myFunction)
def loadForm(self):
self.setProp("txtCompSub", "text", config.compression.sub_folder)
self.setProp("txtNumProtos", "text", config.compression.num_prototype)
self.setPropList("cmbTypeCompression", "model", ["A", "B", "C"])
def setProp(self, objName, propName, value):
obj = self.win.findChild(QObject, objName)
property = QQmlProperty(obj, propName)
property.write(value)
def setPropList(self, objName, propName, values):
obj = self.win.findChild(QObject, objName)
property = QQmlProperty(obj, propName)
property.setModel #### <- ?????????
...
...
我的问题是:
- 是否有更好的方法来加载我的表单
使用self.win.findChild(QObject, objName)
,我可以获得QObject
对象,但不能获得ComboBox
对象。
- 如何在QML文件中获取
ComboBox
对象
在ComboBox
(QObject
)上使用property.read()
,得到一个QAbstractListModel
对象。
- 如何在之前获得
QObject
的情况下设置ComboBox
对象的模型
简单地说:
如何使用python和PyQt在Combobox
QML中设置自定义模型?
我找到了解决方案:
def loadForm(self):
...
self.setPropList("cmbTypeCompression", "model", ["Item A", "Item B"])
def setPropList(self, objName, propName, values):
obj = self.win.findChild(QObject, objName)
property = QQmlProperty(obj, propName)
property.write(values)
但我不知道这是否是最好的解决方案