QML, Python, Signals, and Slots

Eric Mesa ericsbinaryworld at gmail.com
Sun Jun 24 14:56:51 UTC 2012


I have the following in my Python file:

import sys

from PyQt4.QtCore import QDateTime, QObject, QUrl, pyqtSignal
from PyQt4.QtGui import QApplication
from PyQt4.QtDeclarative import QDeclarativeView

#this class will emit success if photo is added to group
class updateGroup(QObject):

  now = pyqtSignal(int)

  def emit_now(self):
    number = 1
    self.now.emit(number)

app = QApplication(sys.argv)

update = updateGroup()

view = QDeclarativeView()
view.setSource(QUrl('flickrviews.qml'))
view.setResizeMode(QDeclarativeView.SizeRootObjectToView)

rootObject = view.rootObject()

rootObject.updateRequired.connect(update.emit_now) #sends signal

update.now.connect(rootObject.updateColor) #tells it which function in qml
gets that signal

view.setGeometry(100, 100, 400, 240)
view.show()

app.exec_()

and the relevant parts in my QML file are:

signal updateRequired;

    function updateColor(number)
                {
                  if(number==1)
                  {
                    addtogroup.buttonColor="blue"
                  }
                }

and later in the file:

   Button{
                id: addtogroup
                width: 200
                bLabel: "Add to Next Group"
                //onButtonClick:
plasmoid.runCommand("/home/ermesa/bin/qml/plasmoids/flickrviews2/contents/ui/flickrhelpers/addtogroup.py",
[photoID,nextphotogroup])
                onButtonClick: updateRequired()
              }

Just curious about one thing:
1) With this framework I can get information from the python program to
affect the QML (and change the button to a blue colour).  How do I get
information to the python program?   In other words, if I have a python
function that's function(int) -> how do I provide the int argument for the
python FROM the QML?

It's a little hard for me to figure out because this stuff is all indirect
- in the QML the signal is referred to as if it were a function.  And the
function gets the data from the signal, but it doesn't seem to make sense
how that happens because there's no real link to it.  I kinda understand
what I'm doing, but not enough to figure out how to get the into to python.

Thanks,
--
Eric Mesa
http://about.me/ericmesa
http://www.ericsbinaryworld.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20120624/c7af683a/attachment.html>


More information about the Plasma-devel mailing list