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" }
 }
...
}

这是我的代码.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对象

ComboBoxQObject)上使用property.read(),得到一个QAbstractListModel对象。

  1. 如何在之前获得QObject的情况下设置ComboBox对象的模型

简单地说:

如何使用python和PyQt在ComboboxQML中设置自定义模型?

我找到了解决方案:

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)

但我不知道这是否是最好的解决方案

相关内容

  • 没有找到相关文章

最新更新