106 lines
3.1 KiB
Python
106 lines
3.1 KiB
Python
|
# -*- 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) //调用信号
|
||
|
}
|
||
|
}
|