日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

QML使用Python的函数

發(fā)布時間:2025/3/20 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QML使用Python的函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

有2種方法:

一、 QML中定義一個信號,連接Python里的函數(shù);

這里的函數(shù)不用特意指明為槽函數(shù),普通函數(shù)即可。

QML的信號連接Python的函數(shù)
QML:
首先在QML中定義一個信號,這里的信號傳遞一個字符串給函數(shù)(信號可帶參數(shù)也可不帶):

signal mySignal(string my_string)

然后在click中發(fā)射這個信號:

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

Python:
使用QML里的信號連接Python里的函數(shù):

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

完整代碼:
QML:

import QtQuick 2.12 import QtQuick.Controls 2.12ApplicationWindow {id: rootwidth: 250height: 500visible: truesignal mySignal(string my_string)MouseArea {id: mouse_areaanchors.fill: parentonClicked: {root.mySignal("hello world")}} }

Python:

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' from PyQt5.QtCore import QObject from PyQt5.QtGui import QGuiApplication from PyQt5.QtQml import QQmlApplicationEngine import sysclass MyWindow(QObject):def __init__(self):super().__init__()self.engine = QQmlApplicationEngine()self.engine.load('qml-test.qml')# root signalmy_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中定義一個類及槽函數(shù),在QML中使用這個槽函數(shù)。

在QML中調(diào)用Python中的槽函數(shù)
首先需要在Python里定義一個類,在類里寫一個槽函數(shù):

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

然后通過setContextProperty將這個類設(shè)置為上下文的一個屬性值:

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

QML文件里不需特別設(shè)置,直接調(diào)用函數(shù)即可。
完整代碼:
Python:

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' from PyQt5.QtGui import QGuiApplication from PyQt5.QtQml import QQmlApplicationEngine from PyQt5.QtCore import QObject, pyqtSlot import sysclass Person(QObject):def __init__(self):super().__init__()@pyqtSlot() # 注意是槽函數(shù)!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.12ApplicationWindow {id: rootwidth: 250height: 500visible: trueButton{text:qsTr("begin")onClicked: {person.begin()}} }

總結(jié)

以上是生活随笔為你收集整理的QML使用Python的函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。