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()
}
}
}
-- END --
QML使用Python的函数的更多相关文章
- python的函数
函数一词起源于数学,但是在编程中的函数和数学中的有很大不同.编程中的函数式组织好的,可重复使用的,用于实现单一功能或相关联功能的代码块. 我们在学习过程中已经使用过一些python内建的函数,如pri ...
- python strip()函数 介绍
python strip()函数 介绍,需要的朋友可以参考一下 函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除 ...
- python split()函数
Python split()函数 函数原型: split([char][, num])默认用空格分割,参数char为分割字符,num为分割次数,即分割成(num+1)个字符串 1.按某一个字符分割. ...
- Python数学函数
1.Python数学函数 1.abs(x):取绝对值,内建函数 2.math.ceil(x):向上取整,在math模块中 3.cmp(x,y):如果 x < y ,返回-1:如果 x == y ...
- Python回调函数用法实例详解
本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函 ...
- Python之函数与变量
本节内容 函数介绍及其作用 函数的定义与调用 函数的参数说明 全局变量与局部变量 值传递和引用传递 一.函数的介绍及其作用 编程语言中的函数与数学中的函数是有区别的:数学中的函数有参数(输入),就会有 ...
- Python基础-函数篇
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 函数与函数式编程 1.面向对象: 华山派-- ...
- 【C++实现python字符串函数库】strip、lstrip、rstrip方法
[C++实现python字符串函数库]strip.lstrip.rstrip方法 这三个方法用于删除字符串首尾处指定的字符,默认删除空白符(包括'\n', '\r', '\t', ' '). s.st ...
- 【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith
[C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...
随机推荐
- NLP传统基础(1)---BM25算法---计算文档和query相关性
一.简介:TF-IDF 的改进算法 https://blog.csdn.net/weixin_41090915/article/details/79053584 bm25 是一种用来评价搜索词和文档之 ...
- 码云 VS首次提交代码报错:failed to push some refs to 'https://gitee.com/Liu_Cabbage/ASP.NET-MVC-QQ-Connect.git'
打开命令提示符: 执行合并命令: git pull --rebase origin master 最后总结: 1.多为第一次提交代码,本地和码云仓库不一致,README.md文件不在本地代码目录中 2 ...
- halcon基础数据类型详解
#if defined(__CHAR_UNSIGNED__) || defined(__sgi) #define INT1 signed char /* integer, signed 1 Byte ...
- .NET Core 3全新来袭!DevExpress Winforms v19.2支持High DPI
DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅.美观且易于使用的应用程序.无论是Office风格的界面,还是分析处理大批量的业务数据,DevExpr ...
- JavaEE企业面试问题之Java基础部分
1. Java基础部分 1.1 Java中的方法覆盖(Override)和方法重载(Overload)是什么意思? 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不 ...
- Java8-Executors-No.02
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import ...
- Java8-Lambda-No.02
public class Lambda2 { @FunctionalInterface public static interface Converter<F, T> { T conver ...
- Activiti服务类- HistoryService服务类
转自:https://www.cnblogs.com/liuqing576598117/p/11164027.html 一共个方法15个方法 用于查询历史工作流信息1.创建查询(7个方法)//创建一个 ...
- [Luogu] 矩阵加速(数列)
题面:https://www.luogu.org/problemnew/show/P1939 题解:https://www.zybuluo.com/wsndy-xx/note/1153810
- 【概率论】2-1:条件概率(Conditional Probability)
title: [概率论]2-1:条件概率(Conditional Probability) categories: Mathematic Probability keywords: Condition ...