QML使用Python的函数过程解析

作者:ibg 时间:2021-12-10 19:20:31 

有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()
     }
 }
}

来源:https://www.cnblogs.com/ibgo/p/11589613.html

标签:qml,python,函数
0
投稿

猜你喜欢

  • 浅谈视觉设计的准确性

    2007-09-18 17:59:00
  • 将多宿主计算机配置为SQL Server访问

    2011-01-04 16:17:00
  • ASP同一站点不同编码程序出现乱码解决办法

    2008-11-10 12:08:00
  • pytorch dataloader 取batch_size时候出现bug的解决方式

    2023-08-12 01:27:45
  • 课程讲解 如何使用SQL Server校勘功能

    2009-01-13 13:27:00
  • 在Oracle中向视图中插入数据的方法

    2009-02-28 10:42:00
  • MS Server和Oracle中对NULL处理的一些细节差异

    2009-06-10 17:35:00
  • Keras官方中文文档:性能评估Metrices详解

    2023-07-15 00:27:40
  • Python开发企业微信机器人每天定时发消息实例

    2022-11-17 14:37:27
  • 网页设计者应当注意九大要点

    2007-08-10 13:30:00
  • python tornado使用流生成图片的例子

    2023-08-24 07:07:20
  • 利用Python3分析sitemap.xml并抓取导出全站链接详解

    2022-01-26 16:27:08
  • 使用php shell命令合并图片的代码

    2023-06-21 22:34:35
  • PHP格式化显示时间date()函数案例讲解

    2023-06-13 06:45:34
  • 100%全屏布局设计

    2009-05-15 12:24:00
  • 详解php中implode explode serialize json msgpack性能对比

    2023-09-03 18:00:19
  • 自动更新程序的设计框架

    2009-08-12 13:00:00
  • CSS模块化设计

    2009-01-05 12:10:00
  • Python读取图片为16进制表示简单代码

    2021-07-24 09:34:15
  • 详解Python静态网页爬取获取高清壁纸

    2023-10-18 08:27:42
  • asp之家 网络编程 m.aspxhome.com