PyQt4 рдФрд░ QML

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдХреНрдпреВрдЯреА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдврд╛рдВрдЪреЗ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдорд╛рдирдХ рдЬреАрдпреВрдЖрдИ рд╡рд┐рдХрд▓реНрдк рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рдкреНрд░рд╕рдиреНрди рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рдХреА рд╕рд░рд▓ рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛ - рдХреНрдпреВрдПрдордПрд▓ рдХреЗ рд╕рд╛рдеред

рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдХреНрдпреВрдПрдордПрд▓ рдХрд╛ рдПрдХ рдмрдВрдбрд▓ рдХреНрдпреВрдЯреА рдШреЛрд╖рдгрд╛рддреНрдордХ рдореЙрдбреНрдпреВрд▓ рд╣реИред рд╕рдВрд╕реНрдХрд░рдг 4.7 рд╕реЗ рд╢реБрд░реВ - PyQt4 рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдХреНрдпреВрдПрдордПрд▓ рдореБрдЦреНрдп рдЬреАрдпреВрдЖрдИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рднреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬрдмрдХрд┐ рдкрд╛рдпрдерди рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд▓рдЪреАрд▓реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рд╣реИред





рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ



рдкрд╣рд▓реЗ рдПрдХ рдХреНрдпреВрдПрдордПрд▓ рдлреЙрд░реНрдоред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рд╣реИ рдФрд░, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдХреБрд╢рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЕрдкрдирд╛ рдХрд╛рдо рдирд╣реАрдВ рд░реЛрдХрддреА рд╣реИрдВред рдХреЛрдб рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред



import Qt 4.7 Rectangle { //  signal wantquit property int qwX: 0; property int qwY: 0 property int owX: 0; property int owY: 0 property bool first: true /*      */ function updateMessage(text) { messageText.text = text } anchors.fill: parent; color: "black" //  Text { id: messageText; anchors.centerIn: parent; color: "white" } //    MouseArea { anchors.fill: parent onClicked: { //     python messageText.text = someone.some_id first = true } onPositionChanged: { owX = first? mouseX : owX owY = first? mouseY : owY first = false qwX+=mouseX-owX qwY+=mouseY-owY //  main.form_move(qwX, qwY) } onDoubleClicked: { //  wantquit() } } }
      
      







рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рдкрддреНрд░ "form.qml" рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЕрдЬрдЧрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВред

рдЕрдм PyQt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдлреЙрд░реНрдо рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, QtDeclarative рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ QDeclarativeView рддрддреНрд╡ рд╣реИред рдпрд╣ QWidget рдХреЗ рдЧреБрдгреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдВрдбреЛ рдпрд╛ рдмрд┐рд▓реНрдЯ-рдЗрди рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд░рдорд╢рдГ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдХрдиреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред



 from PyQt4 import QtCore, QtGui, Qt, QtDeclarative import sys app = QtGui.QApplication(sys.argv) #  QML  view = QtDeclarative.QDeclarativeView() view.setSource(QtCore.QUrl('form.qml')) view.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) view.setGeometry(100, 100, 400, 240) view.show() sys.exit(app.exec_())
      
      







рдкрд░рд┐рдгрд╛рдо рдПрдХ рдЫреАрди-рдиреАрдЪреЗ qmlviewer рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ QDeclarativeView рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддрд╛ рд╣реИ, рдлрд╝реЙрд░реНрдо рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдФрд░, рдЯреЙрдк-рдбрд╛рдЙрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрддрд┐рд░рд┐рдХреНрдд "рд╕реНрдЯрдм" рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреНрд▓рд╛рд╕ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдмрд╕ рдПрдХ рдХрд╛рд▓реА рдЖрдпрдд рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред (рдЪреВрдВрдХрд┐ рдХреЛрдИ рд╡рд┐рдВрдбреЛ рдлреНрд░реЗрдо рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЯрд╛рд╕реНрдХрдмрд╛рд░ рд╕реЗ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред



 from PyQt4 import QtCore, QtGui, Qt, QtDeclarative class I_will_be_form(QtDeclarative.QDeclarativeView): def __init__(self, parent=None): QtDeclarative.QDeclarativeView.__init__(self, parent) #   self.setWindowFlags(Qt.Qt.FramelessWindowHint) self.setSource(QtCore.QUrl.fromLocalFile('form.qml')) self.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.setGeometry(100, 100, 400, 240) self.signal_func_Qml() self.signalThis() self.slot() self.prop() def signal_func_Qml(self): print "Qml's signal" def signalThis(self): print "Signal of PyQt" def slot(self): print "Property" def prop(self): print "Slot " import sys app = QtGui.QApplication(sys.argv) Iwbf = I_will_be_form() Iwbf.show() sys.exit(app.exec_())
      
      







QML рддрдХ рдкрд╣реБрдБрдЪ



рдЪрд▓рд┐рдП рд╕рд┐рдЧреНрдирд▓_рдлреБрдирдХ_ рдХреНрдпреВрдПрдордПрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднрд░рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред QDeclarativeView рдХреЗ рдкрд╛рд╕ QML рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рддрдХ рдкрд╣реБрдБрдЪ рд╣реИ рдЬрд┐рд╕реЗ рдЙрд╕рдиреЗ rootObject () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рд░реВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╕рдВрдХреЗрддреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдХрд┐рд╕реА рднреА QML рддрддреНрд╡ рдХреЛ рд╕реАрдзреЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭрджрд╛рд░ рд╣реЛрдЧрд╛)ред

рдЗрд╕рд▓рд┐рдП, QML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╛рдВрдЯрд┐рдЯ рд╕рд┐рдЧреНрдирд▓ рд╣реИ, рдЬреЛ рд░реВрдЯ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ updateMessage рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рдкрд╛рда рд▓рд┐рдЦрддрд╛ рд╣реИ рдЙрд╕реЗ рдкрд╛рда рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рднреЗрдЬ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



 def signal_func_Qml(self): print "Qml's signal" root = self.rootObject() #(1) root.wantquit.connect(app.quit) #(2) root.updateMessage(QtCore.QString('From root')) #(3)
      
      







рдЗрд╕реА рд╕реЗ рдлрдВрдХреНрд╢рди рднрд░рд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдВрдЦреНрдпрд╛ (1) рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдореЗрдВ, рд╣рдо рд░реВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдЯ рдЪрд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рд▓рд╛рдЗрди (2) рдореЗрдВ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдорд╛рдкреНрддрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдЯреИрдЪ рд╕рд┐рдЧреНрдирд▓ рдкрд░ рджреЗрддреЗ рд╣реИрдВ, рд▓рд╛рдЗрди (3) рдореЗрдВ рд╣рдо рдЕрдкрдбреЗрдЯрдореИрд╕реЗрдЬ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ QML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рдХреЛ QString рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпрдорд┐рдд str рдкреНрд░рдХрд╛рд░ QML рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдЗрд╕реА рддрд░рд╣, рдЖрдк рдкрд╛рдпрдерди рдлрд╛рдЗрд▓ рдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрдХреНрд╖рд╛ I_will_be_form, рдЗрдирдПрдЯреЗрдб рд╕рд┐рдЧреНрдирд▓ (рд╡рд░реНрдЧ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдЙрд╕реА рд╕реНрддрд░ рдкрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрддреЗ рд╣реИрдВ):



 inited = QtCore.pyqtSignal(str) def __init__(self, parent=None): ......
      
      







рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рд┐рдЧреНрдирд▓ рдореЗрдВ рднрд░реЗрдВ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди:



 def signalThis(self): print "Signal of PyQt" root = self.rootObject() #(1) self.inited.connect(root.updateMessage) #(2) self.inited.emit(QtCore.QString("I'm ready!")) #(3)
      
      







рд▓рд╛рдЗрди (1) рдореЗрдВ рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд░реВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИ (рдкрд┐рдЫрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рдж рд╕реЗ рдпрд╣ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдореЗрдВ рдерд╛)ред рд▓рд╛рдЗрди (2) рдореЗрдВ рд╣рдо рдХреНрдпреВрдПрдордПрд▓ рдлрд╛рдЗрд▓ рдХреЗ рдЕрдкрдбреЗрдЯ рдореЗрд╕реЗрдЬреЗрдЬ рдХреЛ рдЗрдирдПрдЯреЗрдб рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рдмрд╛рдВрдзрддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдЬреЛ рдкрд╛рда рд╕рдВрдХреЗрдд рднреЗрдЬрддрд╛ рд╣реИ рд╡рд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрдВрдХреНрддрд┐ рдореЗрдВ (3) рд╣рдо рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдХреЗрдд рднреЗрдЬрддреЗ рд╣реИрдВ "рдореИрдВ рддреИрдпрд╛рд░ рд╣реВрдВ!"ред (рдлрд┐рд░ рд╕реЗ, QString рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдпрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЦреЗрд▓рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛)ред



PyQt рддрдХ рдкрд╣реБрдБрдЪ



PyQt рд╕реЗ QML рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдкрд░реАрдд рд╕рдВрднрд╛рд╡рдирд╛ рднреА рд╣реИред рдЪрд▓реЛ рд╕реНрд▓реЙрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЖрдмрд╛рдж рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред



 def slot(self): print "Property" self.engine().rootContext().setContextObject(self) #(1) self.engine().rootContext().setContextProperty('main', self) #(2)
      
      







рджреЛрдиреЛрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рд╣рдо QML рд╕реЗ PyQt рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдЦреЛрд▓рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрд╡ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрд╛рд░реНрдп (рдпрд╣рд╛рдВ рдпрд╣ I_will_be_form рд╣реИ) QML рд░реВрдЯ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдХрд╛рд░реНрдп рдмрди рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ I_will_be_form рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдп рдЙрдирдХреЗ рдирд╛рдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд░реНрдЧ I_will_be_form рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдореБрдЦреНрдп рдХреЗ рд╕рд╛рде рд░реВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рдЬреЗрдЯ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреНрд░рдорд╢рдГ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЦреНрдп рд╣реИред <рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо>, рдЬреЛ рдирд╛рдо рд╡рд┐рд░реЛрдзреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреА рд╕рдордЭ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣реБрдВрдЪ рдЕрднреА рднреА рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реА рдирд╣реАрдВ рд╣реИред

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдХреНрдпреВрдПрдордПрд▓ рд╕реА ++ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИ, рдЬреЛ рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдирд┐рдЬреА, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рд╕рдВрд░рдХреНрд╖рд┐рдд рдЬреИрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВред рдкрд╛рдпрдерди рдореЗрдВ, рди рддреЛ рдЯрдВрдХрдг рд╣реИ рдФрд░ рди рд╣реА рдпреЗ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рд╣реИрдВред PyQt рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рд╣реА рдХрдХреНрд╖рд╛ I_will_be_form рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд░реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ:



 @QtCore.pyqtSlot(int, int) #(1) def form_move(self, x, y): self.move(x, y)
      
      







рдлрд╝рдВрдХреНрд╢рди рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд x рдФрд░ y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ QDeclarativeView рд╡рд┐рдВрдбреЛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрдм рдЖрдЗрдП рд▓рд╛рдЗрди (1) рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рд╕реНрд▓реЙрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди QML рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдорд╛рди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, OnPositionChanged рдмреНрд▓реЙрдХ рдореЗрдВ QML рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рдорд╛рдиреЛрдВ рдХреЛ form_move рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╡рд┐рдВрдбреЛ рдХреЛ рд▓реЗ рдЬрд╛рдП, рдФрд░, рдЬрдм рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рдЖрдпрдд рдкрд░ рдорд╛рдЙрд╕ рдмрдЯрди рджрдмрд╛рдХрд░, рдЖрдк рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рдкреНрд░реЛрдк рдлрдВрдХреНрд╢рди рдореЗрдВ рднрд░реЗрдВред



 def prop(self): print "Slot" self.engine().rootContext().setContextProperty('someone', so)
      
      







рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо I_will_be_form рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рдФрд░ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ рдФрд░ рддреБрд░рдВрдд рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдореЗрдВ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред



 class Someone(QtCore.QObject): def __init__(self): QtCore.QObject.__init__(self) self.my_id = QtCore.QString("I'm first") @QtCore.pyqtProperty(QtCore.QString) #(1) def some_id(self): return self.my_id so = Someone()
      
      







рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░реЛрдк рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдкрд┐рдЫрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди, рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдЦреЛрд▓реА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рдпрд╣ рдХреЛрдИ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ QObject рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ QML рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЕрдм рдЪрд▓реЛ some_id рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдорд╛рдирд╛ рдЧрдпрд╛ form_move рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╕рдВрдЦреНрдпрд╛ (1) рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдЗрд╕ рдорд╛рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА QML рд╕реЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЦреБрд▓реА рдкрд╣реБрдВрдЪ рднреА рд╣реИред рдлрд┐рд░, рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ str рдХреЗ рдмрдЬрд╛рдп QString рд╣реИред

рдЕрдм QML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ onClicked рдмреНрд▓реЙрдХ рдЕрдкрдиреЗ рдкрд╛рда рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЖрдпрдд рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред



рдирд┐рд╖реНрдХрд░реНрд╖



рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЖрдкрдХреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ PyQt рд╕реЗ QML рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ QML рдХреЛрдб рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИред рд╣рд╛рдВ, рдФрд░ рдпрд╣ рд╡рд┐рдзрд┐ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдо рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдкрд╛рдпрдерди рдХреЛрдб

QML рдХреЛрдб



UPD: рдореБрдЭреЗ рдорд┐рд╕рд┐рдВрдЧ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдХреЛрдб рдЙрдиреНрд╣реЗрдВ рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдкрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ рдареАрдХ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛ред



All Articles