在农村做相亲网站怎么样,北京自己怎么做网站,蚌埠注册公司,网站修改后怎么上传对于Python3和QML通信#xff0c;实际上就是 PyQt5QMLPython3混合编程#xff0c;这是必须的#xff0c;因为QML做图形界面比较容易#xff0c;但是做功能实现就用Python比较好#xff0c;虽然QML也能嵌入 JavaScript代码进行实现#xff0c;但是这样话还不如用Python来实…对于Python3和QML通信实际上就是 PyQt5QMLPython3混合编程这是必须的因为QML做图形界面比较容易但是做功能实现就用Python比较好虽然QML也能嵌入 JavaScript代码进行实现但是这样话还不如用Python来实现代码简洁、易懂。对于以下的例子参考了如下的连接Connecting QML signals in PySidePyQt 5.1.1 Reference Guide - Support for Signals and Slots(1)QML显式的调用Python函数定义一个类并继承QtCore.QObject对象并使用修饰符修饰pyqtSlot123456789class MyClass(QObject):pyqtSlot(str) # 传递参数类型字符串def outputString(self, string):功能: 创建一个槽参数: 输出的数据string返回值: 无print(string)创建rootContext对象并使用setContextProperty(string, object)注册对象这样在QML中就可以调用这个函数了。12context view.rootContext()context.setContextProperty(con, con)如下是一个完整的例子这个例子运行后如果点击鼠标的话会在控制台打印字符串。Python3代码1234567891011121314151617181920212223242526# -*- coding: GBK -*-from PyQt5.QtCore import QUrl, QObject, pyqtSlotfrom PyQt5.QtGui import QGuiApplicationfrom PyQt5.QtQuick import QQuickViewclass MyClass(QObject):pyqtSlot(str) # 输入参数为str类型def outputString(self, string):功能: 创建一个槽参数: 输出的数据string返回值: 无print(string)if __name__ __main__:path test.qml # 加载的QML文件app QGuiApplication([])view QQuickView()con MyClass()context view.rootContext()context.setContextProperty(con, con)view.engine().quit.connect(app.quit)view.setSource(QUrl(path))view.show()app.exec_()QML代码(文件名保存为test.qml)123456789101112131415161718import QtQuick 2.0Rectangle {width: 320; height: 240color: lightgrayText {id: txttext: Clicked mefont.pixelSize: 20anchors.centerIn: parent}MouseArea {id: mouse_areaanchors.fill: parent // 有效区域onClicked: {con.outputString(Hello, Python3)}}}运行结果如下(2)QML调用Python函数并返回这个例子跟上一个相类似只是这次调用Python的函数具有返回值功能。以下是一个完整的例子运行程序后点击鼠标左上角会显示数字30。Python3代码123456789101112131415161718192021222324# -*- coding: GBK -*-from PyQt5.QtCore import QUrl, QObject, pyqtSlotfrom PyQt5.QtGui import QGuiApplicationfrom PyQt5.QtQuick import QQuickViewclass MyClass(QObject):pyqtSlot(int, resultstr) # 声明为槽输入参数为int类型返回值为str类型def returnValue(self, value):功能: 创建一个槽参数: 整数value返回值: 字符串return str(value10)if __name__ __main__:path test.qml # 加载的QML文件app QGuiApplication([])view QQuickView()con MyClass()context view.rootContext()context.setContextProperty(con, con)view.engine().quit.connect(app.quit)view.setSource(QUrl(path))view.show()app.exec_()QML代码(文件名保存为test.qml)12345678910111213141516171819202122232425import QtQuick 2.0Rectangle {id: rootwidth: 320; height: 240color: lightgrayText {id: txttext: Clicked mefont.pixelSize: 20anchors.centerIn: parent}Text {id: txt1text: ...font.pixelSize: 20}MouseArea {id: mouse_areaanchors.fill: parent // 有效区域onClicked: {console.log(test...) // 控制台打印信息txt1.text con.returnValue(20)}}}运行效果如下未点击鼠标时 点击鼠标之后(3)QML连接信号到Python当QML触发事件的时候发射一个信号给Python此时Python调用一个函数。先在QML中定义一个信号1signal sendClicked(string str) // 定义信号然后在捕获事件的时候发射信号1234567MouseArea {id: mouse_areaanchors.fill: parent // 有效区域onClicked: {root.sendClicked(Hello, Python3) # 发射信号到Python}}最后Python中创建一个rootObject对象然后连接这个对象1234567def outputString(string):功能: 输出字符串参数: 输出的数据string返回值: 无print(string)12context view.rootObject()context.sendClicked.connect(outputString) # 连接QML信号sendCLicked以下是一个完整的例子这个例子中当点击鼠标的时候控制台会打印信息。Python3代码12345678910111213141516171819202122232425# -*- coding: GBK -*-from PyQt5.QtCore import QUrl, pyqtSlotfrom PyQt5.QtGui import QGuiApplicationfrom PyQt5.QtQuick import QQuickViewdef outputString(string):功能: 输出字符串参数: 输出的数据string返回值: 无print(string)if __name__ __main__:path test.qml # 加载的QML文件app QGuiApplication([])view QQuickView()view.engine().quit.connect(app.quit)view.setSource(QUrl(path))view.show()context view.rootObject()context.sendClicked.connect(outputString) # 连接QML信号sendCLickedapp.exec_()QML代码(文件名保存为test.qml)12345678910111213141516171819202122import QtQuick 2.0Rectangle {id: rootwidth: 320; height: 240color: lightgraysignal sendClicked(string str) // 定义信号Text {id: txttext: Clicked mefont.pixelSize: 20anchors.centerIn: parent}MouseArea {id: mouse_areaanchors.fill: parent // 有效区域onClicked: {root.sendClicked(Hello, Python3) # 发射信号到Python}}}运行结果如下(4)Python调用QML函数QML中创建一个函数123function updateRotater() {rotater.angle 45}Python中创建一个rootObject对象并连接这个函数12root view.rootObject()timer.timeout.connect(root.updateRotater)以下是一个完整的例子例子中每隔1s指针会旋转45°。Python3代码123456789101112131415161718192021# -*- coding: GBK -*-from PyQt5.QtCore import QUrl, QTimerfrom PyQt5.QtGui import QGuiApplicationfrom PyQt5.QtQuick import QQuickViewif __name__ __main__:path test.qml # 加载的QML文件app QGuiApplication([])view QQuickView()view.engine().quit.connect(app.quit)view.setSource(QUrl(path))view.show()timer QTimer()timer.start(2000)root view.rootObject()timer.timeout.connect(root.updateRotater)app.exec_()QML代码(文件名保存为test.qml)123456789101112131415161718192021222324import QtQuick 2.0Rectangle {id: pagewidth: 500; height: 200color: lightgrayfunction updateRotater() {rotater.angle 45}Rectangle {id: rotaterproperty real angle : 0x: 240; y: 95width: 100; height: 5color: blacktransform: Rotation {origin.x: 10; origin.y: 5angle: rotater.angle}}}运行结果如下本人水平有限如果有疏漏之处欢迎指点。