IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Pourquoi paintEvent s'exécute-t-il sans rien exécuter ?


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 6
    Par défaut Pourquoi paintEvent s'exécute-t-il sans rien exécuter ?
    Bonjour,
    Tout juste débutant en Pyqt4, et assez peu habitué aux langages à "signaux et slots!" donc ne m'en veuillez pas si je pose des questions bêtes.

    Pourquoi la fonction paintEvent de mon programme, même lorsqu'elle s'éxecute (cela se voit par l'affichage d'un compteur sur la console python, la variable paev ligne 68), ne trace-t-elle pas les rectangles demandés? (qp.fillRect ligne 67)?
    Le problème est encore plus déroutant car parfois elle le fait (lorsqu'on clique hors de la fenetre,ou qu'on la redimensionne), et parfois elle ne le fait pas (lorsque le curseur de la souris survole l'icone Exit par exemple).
    Pour s'en apercevoir:
    1- lancer le programme joint
    2- cliquer dans divers endroits dans le carré vert: rien ne se passe
    3- survoler l'icone exit, la console python affiche le compteur qui s'incrémente, preuve que la fonction paintEvent est bien executée, mais les fillRect de cette fonction ne sont pas executés.
    4- redimensionner la fenetre,ou bien cliquer en dehors de cette fenetre, cette fois-ci paintEvent s'execute et les fillRect aussi.

    J'y perds mon latin, étant de la vieille école des langages linéaires et procéduraux.

    Merci de toute aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    faut pas actualiser la fenêtre à un moment ?

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 6
    Par défaut Merci mais
    On fait comment?

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Essaie avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QtCore.QCoreApplication.processEvents()

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Citation Envoyé par jpcasti Voir le message
    Pourquoi la fonction paintEvent de mon programme, même lorsqu'elle s'éxecute (cela se voit par l'affichage d'un compteur sur la console python, la variable paev ligne 68), ne trace-t-elle pas les rectangles demandés? (qp.fillRect ligne 67)?
    Parce que les éléments de ton tableau valent toujours 0.
    Change ton code comme ceci pour t'en convaincre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        def paintEvent(self, e):
            qp = QtGui.QPainter()
            qp.begin(self)
            qp.fillRect(self.surface,QtGui.QColor(0, 200, 0))
            for i in range(self.nombre):
                for j in range(self.nombrey):
                    print i, j, ">>", self.tableau[i][j]   # Ceci en +
                    if self.tableau[i][j]==1:
                        qp.fillRect(self.rectangles[i][j],QtGui.QColor(0, 0, 200))
            self.paev+=1
            print self.paev
    Le problème est encore plus déroutant car parfois elle le fait (lorsqu'on clique hors de la fenetre,ou qu'on la redimensionne), et parfois elle ne le fait pas.
    J'ai aussi remarqué cela, mais trop rarement et aléatoirement pour que cela veuille dire que le code fonctionne correctement parfois.

  6. #6
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 6
    Par défaut
    Merci pour toutes vos réponses.
    Initialement le tableau est vide donc aucun carré bleu. A chaque clic un nouveau carré bleu est créé, mais pas affiché, malgré l'exécution de la ligne de code : "qp.fillRect(self.rectangles[i][j],QtGui.QColor(0, 0, 200))".
    Le problème vient effectivement d'une actualisation de la fenêtre d'affichage qui doit se faire par self.update().
    j'aurai décidément toujours des problèmes avec ces nouveaux langages qui exécutent ce qu'on leur demande... quand cela leur plait, ou quand ils n'ont plus rien d'autre à faire!
    En même temps,ça fait que 24h que je m'y suis mis.
    Merci encore à tous.

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Citation Envoyé par jpcasti Voir le message
    Le problème vient effectivement d'une actualisation de la fenêtre d'affichage qui doit se faire par self.update().
    j'aurai décidément toujours des problèmes avec ces nouveaux langages qui exécutent ce qu'on leur demande... quand cela leur plait, ou quand ils n'ont plus rien d'autre à faire!
    Citation Envoyé par jpcasti Voir le message
    4- redimensionner la fenetre,ou bien cliquer en dehors de cette fenetre, cette fois-ci paintEvent s'execute et les fillRect aussi.
    si tu ne demandes pas au system d'actualiser la fenêtre, rien ne se voit, ça ne veut pas dire que rien ne se passe. Les rectangles sont bien dessinés mais ne sont pas visibles tant que tu ne le demandes pas; et heureusement car cela prend du temps ...
    quand tu redimensionnes la fenêtre, le system l'actualise de lui-même ...

  8. #8
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 6
    Par défaut
    Ok, bien compris cette fois-ci. Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. excuter le programme sans rien afficher
    Par safa1990 dans le forum Caml
    Réponses: 1
    Dernier message: 27/05/2014, 19h25
  2. programme qui semble s'exécuter sans rien afficher
    Par Arketran dans le forum Débuter
    Réponses: 8
    Dernier message: 04/01/2011, 08h13
  3. Exécuter du code sans rien afficher
    Par Gébix dans le forum Débuter
    Réponses: 12
    Dernier message: 13/04/2009, 15h45
  4. Comment écrire en exposant sans rien devant ?
    Par Pow1111 dans le forum Mathématiques - Sciences
    Réponses: 2
    Dernier message: 06/12/2006, 12h49
  5. a quoi sert un return sans rien après ?
    Par harlock59 dans le forum C
    Réponses: 11
    Dernier message: 17/01/2006, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo