他们喝 5.5 YML Zomboboks

PyQt 5.5 QML Combobox

我正在尝试使用 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" }
 }
...
}

这是我的code.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 #### <- ?????????
 ...

...

嗯,我的问题是:

  1. 是否有更好的方法来加载我的表单?

使用 self.win.findChild(QObject, objName) 我可以获得 QObject 但不是 ComboBox 对象。

  1. 如何在 QML 文件中获取 ComboBox 对象?

ComboBox (QObject) 上使用 property.read() 我得到一个 QAbstractListModel 对象。

  1. 如何使用之前获取的 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)

...但不知道是不是最好的方案