# -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import * from PyQt5.QtQuickWidgets import QQuickWidget from PyQt5.QtCore import QUrl, pyqtSignal, pyqtSlot from PyQt5.QtCore import * class Widget(QWidget): sigSendToQml = pyqtSignal(str) def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle('Qt UI Demo') self.setGeometry(100, 100, 640, 480) # self.setStyleSheet("QWidget {background-color: transparent; border: 2px solid black; border-radius: 10px;}") # self.setWindowFlags(Qt.FramelessWindowHint) layout = QVBoxLayout() self.L = QListWidget() layout.addWidget(self.L) self.quickWidget = QQuickWidget() self.quickWidget.setFocus() self.quickWidget.setResizeMode(QQuickWidget.SizeRootObjectToView) self.quickWidget.setSource(QUrl('qml.qml')) self.Ls = QListWidgetItem(self.L) self.Ls.setSizeHint(self.quickWidget.sizeHint()) self.L.addItem(self.Ls) self.L.setItemWidget(self.Ls, self.quickWidget) self.quickWidget = QQuickWidget() self.quickWidget.setFocus() self.quickWidget.setResizeMode(QQuickWidget.SizeRootObjectToView) self.quickWidget.setSource(QUrl('qml.qml')) self.Ls = QListWidgetItem(self.L) self.Ls.setSizeHint(self.quickWidget.sizeHint()) self.L.addItem(self.Ls) self.L.setItemWidget(self.Ls, self.quickWidget) # layout.addWidget(self.quickWidget) self.lineEdit = QLineEdit() layout.addWidget(self.lineEdit) send_button = QPushButton('Send') send_button.clicked.connect(self.on_send_clicked) layout.addWidget(send_button) self.setLayout(layout) self.sigSendToQml.connect(self.quickWidget.rootObject().sigQmlReceiveStr) self.quickWidget.rootObject().sigQmlSendStr.connect(self.slotReceiveFormQml) @pyqtSlot() def on_send_clicked(self): self.sigSendToQml.emit(self.lineEdit.text()) @pyqtSlot(str) def slotReceiveFormQml(self, string): print('Received from QML:', string) if __name__ == '__main__': app = QApplication(sys.argv) widget = Widget() widget.show() sys.exit(app.exec_()) import QtQuick 2.9 import QtQuick.Controls 2.2 Rectangle { id: root width: 400 height: 300 color: "transparent" // 设置背景颜色 border.color: "red" // 设置边框颜色 border.width: 5 // 设置边框宽度 radius: 10 // 设置圆角半径 signal sigQmlReceiveStr(string str) //定义接收信号(from QWidget) signal sigQmlSendStr(string str) //定义发送信号(to QWidget) Image { id: image source: "https://tse4-mm.cn.bing.net/th/id/OIP-C.duz6S7Fvygrqd6Yj_DcXAQHaF7?rs=1&pid=ImgDetMain" // 设置图片URL anchors.centerIn: parent width: 200 height: 200 fillMode: Image.PreserveAspectFit // 设置图片填充模式 } Text { id: text anchors.centerIn: parent color: "red" font.pixelSize: 100 text: qsTr("hello world!") } onSigQmlReceiveStr: { //信号对应槽函数 text.text = str root.sigQmlSendStr("received: " + str) //调用信号 } }