PyQt 5.5 QML 组合框

Posted

技术标签:

【中文标题】PyQt 5.5 QML 组合框【英文标题】:PyQt 5.5 QML Combobox 【发布时间】:2015-10-27 17:08:13 【问题描述】:

我正在尝试使用 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 上使用property.read() (QObject) 我得到一个QAbstractListModel 对象。

    如何设置ComboBox 对象的模型与之前获得的QObject

简单来说:

如何使用 python 和 PyQt 在Combobox QML 中设置我的自定义模型?

【问题讨论】:

【参考方案1】:

我找到了解决办法:

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)

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

【讨论】:

以上是关于PyQt 5.5 QML 组合框的主要内容,如果未能解决你的问题,请参考以下文章

带有复选框的 QML 组合框

QML - 无法将组合框模型绑定到变体列表项

单击单选按钮或更改 PyQt 中的旋转框时,组合框索引值返回默认值 0

QtQuick.Controls 2.2 中的 QML 组合框样式问题

如何使组合框项目在 qml 中不可选择?

Pyqt5 组合框允许搜索但阻止添加