有2種方法:
一、 qml中定義乙個訊號,連線python裡的函式;
這裡的函式不用特意指明為槽函式,普通函式即可。
qml的訊號連線python的函式
qml:
首先在qml中定義乙個訊號,這裡的訊號傳遞乙個字串給函式(訊號可帶引數也可不帶):
signal mysignal(string my_string)
然後在click中發射這個訊號:
onclicked:
python:
使用qml裡的訊號連線python裡的函式:
engine.rootobjects()[
0].mysignal.connect(my_func)
# 這裡的mysignal是在qml裡定義的
完整**:
qml:
import qtquick 2.12
import qtquick.controls 2.12
id: root
width:
250 height:
500 visible: true
signal mysignal(string my_string)
mousearea
}}
python:
'''
'''from pyqt5.qtcore import qobject
import sys
class
mywindow
(qobject)
:def
__init__
(self)
:super()
.__init__())
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__'
: window = mywindow(
)exec()
)
二、 python中定義乙個類及槽函式,在qml中使用這個槽函式。
在qml中呼叫python中的槽函式
首先需要在python裡定義乙個類,在類裡寫乙個槽函式:
class
person
(qobject)
:def
__init__
(self)
:super()
.__init__(
) @pyqtslot(
)# 注意是槽函式!
defbegin
(self)
:print
('begin'
)
然後通過setcontextproperty將這個類設定為上下文的乙個屬性值:
person = person(
)engine.rootcontext(
).setcontextproperty(
'person'
, person)
qml檔案裡不需特別設定,直接呼叫函式即可。
完整**:
python:
'''
'''from pyqt5.qtcore import qobject, pyqtslot
import sys
class
person
(qobject)
:def
__init__
(self)
:super()
.__init__(
) @pyqtslot(
)# 注意是槽函式!
defbegin
(self)
:print
('begin'
)if __name__ ==
'__main__':)
person = person(
) engine.rootcontext(
).setcontextproperty(
'person'
, person)
engine.load(
'qml-test.qml'
)exec()
)
qml:
import qtquick 2.12
import qtquick.controls 2.12
id: root
width:
250 height:
500 visible: true
button
}}
qml使用記錄
1.通過property var 宣告的資料型別即使是string型別,仍然無法使用string的方法,為了使用可以直接將其定義為string型別 2.timer是qml的定時器,restart 方法才會清零,stop不會 3.tooltip不是所有控制項都存在的,可以自己定義乙個tooltip 方...
QML筆記 QML基本資料型別的使用
目錄 基本概念 舉個栗子 這裡的資料型別不僅僅有c 裡面的int,string等,還有個很有特點的型別var,這個又可以放陣列,也可以放函式,也可以混著換,很少有趣。程式執行截圖如下 後台列印如下 原始碼如下 import qtquick 2.9 import qtquick.window 2.2 ...
Python操作qml物件
qml import qtquick 2.12 import qtquick.controls 2.12 id window width 250 height 500 visible true python engine.load qml test.qml root obj engine.rooto...