目前正在开发一个Python程序,该程序使用.ui文件中的Qt小部件来显示可交互的GUI。但是,我还没有找到一种方法来集成QQuickview小部件来显示任何QML代码,我已经读过了
我使用PySide2从Qt Designer转换.ui文件,并尝试使用Qt Designer中的QQuickWidget,手动将QQuickView添加到.ui中的gridLayout中,但都没有成功
据我所知,我在Qt Designer中添加的QQuickWidget在python中运行时已转换为QWidget,因此在运行代码时setSource(QUrl)或.load(QUrl)毫无意义
我尝试添加QQuickView:
def connect_map_click(self):
# Function for handling the connect map button
engine = QQuickView()
ctx = engine.rootContext()
url = QUrl.fromLocalFile('QMLtest.qml')
engine.setSource(url)
container = QWidget.createWindowContainer(engine, self)
container.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
engine.show()
self.window.grd_map.addWidget(container, 0, 0)
QML文件:
import QtQuick 2.7
Rectangle {
id: rectangle
color: "red"
width: 200
height: 200
visible: true
Text {
id:text
text: "It's working!"
}
}
我自己解决了这个问题,就像一个人在寻求帮助后往往会做的那样
最后发现我以前没有将QQuickWidget导入Python文件。因此,我的解决方案最终是用python创建一个QQuickWidget,将源代码设置为qml文件,并将其添加到.uigui中的网格中
生成的GUI:
说明:
QQuickView是一个局部变量,当“connect\u map\u click”完成在容器中执行任何操作时,它将被删除
解决方案:
解决方案是延长生命周期,为此有以下替代方案:
或者
self
:备注:
正如您所指出的,另一种解决方案是使用QQuickWidget,因为它的生命周期取决于您的父母,他们是自己的,所以他将和类一样长寿。但正如the docs指出的那样,QQuickWidget有一些限制,包括您将无法记录可能是您的需求之一的项
这种行为在PySide2中发生,但在PyQt5中,由于容器作为父对象传递给窗口的QWindow,因此初始代码可以工作
相关问题 更多 >
编程相关推荐