温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

QML怎么使用Python的函数

发布时间:2021-04-27 12:42:38 来源:亿速云 阅读:370 作者:小新 栏目:开发技术

这篇文章主要介绍QML怎么使用Python的函数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

有2种方法:

一、 QML中定义一个信号,连接Python里的函数;

这里的函数不用特意指明为槽函数,普通函数即可。

QML的信号连接Python的函数

QML:

首先在QML中定义一个信号,这里的信号传递一个字符串给函数(信号可带参数也可不带):

signal mySignal(string my_string)

然后在click中发射这个信号:

onClicked:{   root.mySignal("hello world") }

Python:

使用QML里的信号连接Python里的函数:

engine.rootObjects()[0].mySignal.connect(my_func) # 这里的mySignal是在QML里定义的

完整代码:

QML:

import QtQuick 2.12 import QtQuick.Controls 2.12 ApplicationWindow {   id: root   width: 250   height: 500   visible: true   signal mySignal(string my_string)   MouseArea {     id: mouse_area     anchors.fill: parent     onClicked: {       root.mySignal("hello world")     }   } }

Python:

from PyQt5.QtCore import QObject from PyQt5.QtGui import QGuiApplication from PyQt5.QtQml import QQmlApplicationEngine import sys class MyWindow(QObject):   def __init__(self):     super().__init__()     self.engine = QQmlApplicationEngine()     self.engine.load('qml-test.qml')     # root signal     my_obj = self.engine.rootObjects()[0]     my_obj.mySignal.connect(self.my_func)   def my_func(self, my_string):     print(my_string) if __name__ == '__main__':   app = QGuiApplication(sys.argv)   window = MyWindow()   sys.exit(app.exec())

二、 Python中定义一个类及槽函数,在QML中使用这个槽函数

在QML中调用Python中的槽函数

首先需要在Python里定义一个类,在类里写一个槽函数:

class Person(QObject):   def __init__(self):     super().__init__()   @pyqtSlot() # 注意是槽函数!   def begin(self):     print('begin')

然后通过setContextProperty将这个类设置为上下文的一个属性值:

person = Person() engine.rootContext().setContextProperty('person', person)

QML文件里不需特别设置,直接调用函数即可。

完整代码:

Python:

from PyQt5.QtGui import QGuiApplication from PyQt5.QtQml import QQmlApplicationEngine from PyQt5.QtCore import QObject, pyqtSlot import sys class Person(QObject):   def __init__(self):     super().__init__()   @pyqtSlot() # 注意是槽函数!   def begin(self):     print('begin') if __name__ == '__main__':   app = QGuiApplication(sys.argv)   engine = QQmlApplicationEngine()   person = Person()   engine.rootContext().setContextProperty('person', person)   engine.load('qml-test.qml')   sys.exit(app.exec())

QML:

import QtQuick 2.12 import QtQuick.Controls 2.12 ApplicationWindow {   id: root   width: 250   height: 500   visible: true   Button{       text:qsTr("begin")       onClicked: {         person.begin()       }   } }

以上是“QML怎么使用Python的函数”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI