对于Python3和QML通信,实际上就是PyQt5+QML+Python3混合编程,这是必须的,因为QML做图形界面比较容易,但是做功能实现就用Python比较好,虽然QML也能嵌入JavaScript代码进行实现,但是这样话还不如用Python来实现,代码简洁、易懂。
对于以下的例子,参考了如下的连接:
Connecting QML signals in PySide:
http://qt-project.org/wiki/Connecting_QML_Signals_in_PySide
PyQt 5.1.1 Reference Guide -> Support for Signals and Slots:
http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html?highlight=pyqtslot#PyQt5.QtCore.pyqtSlot
(1)QML显式的调用Python函数
定义一个类,并继承QtCore.QObject对象,并使用@修饰符修饰pyqtSlot
class MyClass(QObject):
@pyqtSlot(str) # 传递参数类型字符串
def outputString(self, string):
"""
功能: 创建一个槽
参数: 输出的数据string
返回值: 无
"""
print(string)
创建rootContext对象,并使用setContextProperty(string, object)注册对象,这样在QML中就可以调用这个函数了。
context = view.rootContext()
context.setContextProperty("con", con)
如下是一个完整的例子:
这个例子运行后,如果点击鼠标的话,会在控制台打印字符串。