有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.12import QtQuick.Controls2.12ApplicationWindow {

id: root

width:250height:500visible:truesignal mySignal(string my_string)

MouseArea {

id: mouse_area

anchors.fill: parent

onClicked: {

root.mySignal("hello world")

}

}

}

Python:

from PyQt5.QtCore importQObjectfrom PyQt5.QtGui importQGuiApplicationfrom PyQt5.QtQml importQQmlApplicationEngineimportsysclassMyWindow(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)defmy_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里定义一个类,在类里写一个槽函数:

classPerson(QObject):def __init__(self):

super().__init__()

@pyqtSlot()#注意是槽函数!

defbegin(self):print(‘begin‘)

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

person =Person()

engine.rootContext().setContextProperty(‘person‘, person)

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

完整代码:

Python:

from PyQt5.QtGui importQGuiApplicationfrom PyQt5.QtQml importQQmlApplicationEnginefrom PyQt5.QtCore importQObject, pyqtSlotimportsysclassPerson(QObject):def __init__(self):

super().__init__()

@pyqtSlot()#注意是槽函数!

defbegin(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.12import QtQuick.Controls2.12ApplicationWindow {

id: root

width:250height:500visible:trueButton{

text:qsTr("begin")

onClicked: {

person.begin()

}

}

}

-- END --

qml调用python_QML使用Python的函数相关推荐

  1. python函数定义及调用-浅谈Python中函数的定义及其调用方法

    一.函数的定义及其应用 所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤 1.定义函数�C封装独立的功能 2.调用函数�C享受封装的成果 函数的作用:在开 ...

  2. QML使用Python的函数

    有2种方法: 一. QML中定义一个信号,连接Python里的函数: 这里的函数不用特意指明为槽函数,普通函数即可. QML的信号连接Python的函数 QML: 首先在QML中定义一个信号,这里的信 ...

  3. python qt信号在qml 的使用_QML使用Python的函数过程解析

    有2种方法: 一. QML中定义一个信号,连接Python里的函数: 这里的函数不用特意指明为槽函数,普通函数即可. QML的信号连接Python的函数 QML: 首先在QML中定义一个信号,这里的信 ...

  4. Qt C++属性类型提供给 QML调用(一)

    概述 由于QML引擎与Qt元对象系统的紧密集成,任何由QObject派生出来的类其公有的接口或属性都可以从QML代码中轻松访问,并且改动的地方很少,就可以让C++代码定义的功能轻松扩展QML. 任何Q ...

  5. python调用js库中的函数_Python 调用JS文件中的函数

    Python 调用JS文件中的函数 1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r&q ...

  6. python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce、map、filter)

    python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce.map.filter) Python 中函数的应用非常广泛,比如 input() .print().range( ...

  7. python如何调用cpp文件的接口函数_C++中嵌入Python调用

    python嵌入到C++中 把python嵌入的C++里面需要做一些步骤 安装python程序,这样才能使用python的头文件和库 在我们写的源文件中增加"Python.h"头文 ...

  8. python调用php命令行,python调用php函数 python怎样调用php文件中的函数详解

    前言 python调用php代码实现思路:php文件可通过在terminal中使用php命令行进行调用,因此可使用python开启子进程执行命令行代码.函数所需的参数可通过命令行传递. 测试环境 1. ...

  9. Python自定义函数的创建、调用和函数的参数详解

    这篇文章主要介绍了Python自定义函数的创建.调用和函数的参数.变量作用域等常见问题,需要的朋友可以参考下 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性 ...

  10. python程序设计——函数设计与调用

    一.函数定义与调用 def 函数名([参数列表]):'''注释'''函数体 # 输出小于n的斐波那契数 >>def fib(n):a,b=1,1while a < n:print(a ...

最新文章

  1. 结构型模式 -- 代理模式(静态代理动态代理)
  2. runtime运行时编程一些相关知识
  3. 【HDU1495非常可乐】【POJ3414Pots】
  4. 6、单机运行环境搭建之 --CentOS-6.4安装MySQL 5.6.10并修改MySQL的root用户密码
  5. Linux下Crontab定时执行命令
  6. 芯片项目谁支持谁负责 重大损失将予以通报
  7. [读书笔记] - 《深度探索C++对象模型》第6章 第7章
  8. “形象代言人”与“抽风式管理”
  9. canvas drawImage() 方法绘制图片与视频
  10. 安装face_recognition(ModuleNotFoundError: No module named 'face_recognition')
  11. Windows下自动云备份思源笔记到Gitee
  12. python爬虫之通用爬虫和聚焦爬虫
  13. mvc2 mvc_MVC之外的世界
  14. 阿里云被攻击封多久,又该怎么解决?
  15. ChatGPT介绍以及一些使用案例
  16. 全球即将诞生第二家卡车自动驾驶上市公司,行业转折点已经到来
  17. android type c 耳机检测,USB Type-C 的新音频标准将帮助 Android 设备去掉 3.5mm 耳机孔...
  18. 2019~ROS暑期学校~ROS Summer School in China~分享
  19. UOS其他分区及移动硬盘带锁问题处理
  20. 铨顺宏RFID:射频技术应用在服装资产管理上有什么作用

热门文章

  1. Web App 前端构建(纯净版)
  2. 京沪等地11月房价半年来首涨 平价走量将成主流
  3. 如何进行各种码制数据之间转换
  4. 浮动路由与VRRP的概念
  5. OSPF邻接关系状态机
  6. web安全day35:Linux防火墙进阶
  7. Security+ 学习笔记1 恶意软件
  8. LNMP详解(十)——Nginx负载分担实战
  9. MySQL存储过程(四)——存储过程循环流控语句
  10. 边缘计算的前景和挑战