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.