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 组合框的主要内容,如果未能解决你的问题,请参考以下文章
单击单选按钮或更改 PyQt 中的旋转框时,组合框索引值返回默认值 0