Forum Programmation.python Akonadi, comprend pas :-/

Posté par (site web personnel) .
Étiquettes : aucune
-2
8
avr.
2011
#!/usr/bin/python2
from PyKDE4.akonadi import *
from PyKDE4.kdecore import *
from PyQt4.QtCore import *
import sys
def fetch(job):
 print "plop"
 if job.error(): print job.errorString()
 else: print "prout"
mimeTypes = QStringList()
mimeTypes.append("application/x-vnd.akonadi.calendar.todo")
mimeTypes.append("application/x-vnd.akonadi.calendar.event")
scope = Akonadi.CollectionFetchScope()
scope.setContentMimeTypes(mimeTypes)
fetchJob = Akonadi.CollectionFetchJob(Akonadi.Collection.root(), Akonadi.CollectionFetchJob.Recursive)
fetchJob.setFetchScope(scope)
fetchJob.result.connect(fetch)
fetchJob.start()
app = QCoreApplication(sys.argv)
app.exec_()

Bonjour, j'essaye de faire fonctionner ce bout de code sans succès :(

La fonction fetch ne semble pas appelée (sauf si je vire app.exec_() mais du coup j'ai une erreur inconnue "print job.errorString()").

Si quelqu'un sait ou je me plante ...

  • # slot sur une fonction

    Posté par . Évalué à 2.

    Disclaimer: je ne connais pas akonadi, je n'utilise pas kde
    Peut-être c'est possible avec pyqt/pyside, mais en Qt/C++, il n'est pas possible d'avoir un slot sur une fonction qui ne se trouve hors d'une classe héritant QObject. Ta fonction fetch n'est même pas dans une classe.

    Essaye comme ça :

    class Displayer(QObject):
     def fetch(self, job):
     print "plop", job
    # ...
    d = Displayer()
    fetchJob.result.connect(d.fetch)
    

    Essaye peut-être aussi de créer la QCoreApplication avant tout le reste.

    • [^] # Re: slot sur une fonction

      Posté par (site web personnel) . Évalué à 2.

      Ca ne fonctionne pas non plus mais merci quand meme ;)

      • [^] # Re: slot sur une fonction

        Posté par . Évalué à 3.

        Comme le dit Octabrain il fait créer l'objet de l'application avant le reste et comme le dit le site de KDE QApplication n'est pas substituable à KApplication !

        Comme ça ça a l'air de marcher :

        #!/usr/bin/python2
        from PyKDE4.akonadi import *
        from PyKDE4.kdecore import *
        from PyQt4.QtCore import *
        from PyKDE4.kdeui import KApplication
        import sys
        def fetch(job):
         print "plop"
         if job.error(): print job.errorString()
         else: print "prout"
        appName = "MyApp"
        catalog = ""
        programName = ki18n("")
        version = "0.1"
        description = ki18n("")
        license = KAboutData.License_GPL
        copyright = ki18n("")
        text = ki18n("")
        homePage = ""
        bugEmail = ""
        aboutData = KAboutData (appName, catalog, programName, version, description,
         license, copyright, text, homePage, bugEmail)
        KCmdLineArgs.init (sys.argv, aboutData)
        app = KApplication()
        mimeTypes = QStringList()
        mimeTypes.append("application/x-vnd.akonadi.calendar.todo")
        mimeTypes.append("application/x-vnd.akonadi.calendar.event")
        scope = Akonadi.CollectionFetchScope()
        scope.setContentMimeTypes(mimeTypes)
        fetchJob = Akonadi.CollectionFetchJob(Akonadi.Collection.root(), Akonadi.CollectionFetchJob.Recursive)
        fetchJob.setFetchScope(scope)
        fetchJob.result.connect(fetch)
        fetchJob.start()
        app.exec_() 
        

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.