PyQt/lesson1/QML.py

106 lines
3.1 KiB
Python
Raw Permalink Normal View History

2024-10-04 13:00:37 +08:00
# -*- 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) //调用信号
}
}