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 :

Les bogues de PyQt 4.8.3 et suivante


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut Les bogues de PyQt 4.8.3 et suivante
    Bonsoir

    Juste pour vous informer qu'aujourd'hui je me suis pris la tête avec un QTextEdit qui, quand on appuie sur la touche "backspace", envoie 2 signaux "textEdited()".

    J'avais déjà ouvert un topic à propos du removeItemWidget() qui ne fonctionne plus en PyQt v4.8.4 et 4.8.5 (http://www.developpez.net/forums/d11...rsion-suivante et là, je trouve ce pb sur PyQt v4.8.3...

    Ca m'a pris la tête parce que je récupère ce signal dans un objet appelant qui, quand la zone devient vide, supprime un élément d'un dictionnaire. Bien évidemment, interceptant 2 signaux, je tente de supprimer 2 fois mon élément ce qui fait un peu bugguer le truc. Et avant de trouver la cause réelle du pb...

    Pour ceux qui veulent tester le truc, voici un petit code test
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import sys
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
     
    class QtAppli(QApplication):
    	"Fenêtre de l'application"
     
    	# Constructeur fenêtre
    	def __init__(self,
    			argv):
     
    		# Message de contrôle
    		print "QtAppli (qt v%s, pyqt_v%s)" % (QT_VERSION_STR, PYQT_VERSION_STR)
     
    		# Appel constructeur de l'objet hérité
    		QApplication.__init__(self, argv)
     
    		# Attributs de l'application
    		self.argv=argv
     
    		# Widget principale
    		self.__mainWid=QMainWindow()
    		self.__mainWid.setCentralWidget(QWidget(self.__mainWid))
    		self.__mainWid.statusBar()
     
    		# Titre
    		self.__mainWid.setWindowTitle("Test qtextedit")
     
    		# Version
    		self.__mainWid.statusBar().showMessage(
    			"Qt v%s, PyQt v%s" % (
    				QT_VERSION_STR,
    				PYQT_VERSION_STR,
    			)
    		)
     
    		# Un espace de rangement général
    		mainLayout=QHBoxLayout(self.__mainWid.centralWidget())
     
    		# Le textedit
    		self.__tabItem=[]
    		self.__textEdit=QTextEdit()
    		self.connect(self.__textEdit, SIGNAL("textChanged()"), self.__slotEdited)
     
    		# La zone des boutons
    		layoutBtn=QVBoxLayout()
     
    		# Pour quitter
    		quit=QPushButton()
    		quit.setText("Quitter")
    		self.connect(quit, SIGNAL("clicked()"), self.__mainWid, SLOT("close()"))
     
    		# Rangement des boutons
    		layoutBtn.addWidget(quit)
     
    		# Rangement général
    		mainLayout.addWidget(self.__textEdit)
    		mainLayout.addLayout(layoutBtn)
    	# __init__()
     
    	# Le slot appelé quand le texte change
    	def __slotEdited(self):
    		# Petit message dans la console
    		print "edite [%s] (%d)" % (self.__textEdit.toPlainText(), len(self.__textEdit.toPlainText()))
     
    		# Popup
    		QMessageBox.information(
    			self.__mainWid.centralWidget(),
    			QString.fromUtf8("Texte modifié"),
    			QString.fromUtf8(
    				"Contenu de la zone: [%s]\n" % self.__textEdit.toPlainText()
    				+ "Taille saisie: [%d]" % len(self.__textEdit.toPlainText())
    			),
    			QMessageBox.Ok,
    		)		
    	# __slotEdited()
     
    	# Affichage et lancement application
    	def run(self):
    		self.__mainWid.show()
    		self.exec_()
    	# run()
    # class QtAppli
     
    Appli=QtAppli(sys.argv)
    Appli.run()

    Donc celui qui voudra tester verra. Tant qu'il entre des caractères tout va bien. Il a une popup pour chaque caractère entré.
    Mais si on supprime un caractère via la touche backspace, alors on a 2 popups qui montrent que le slotEdited() a été appelé 2 fois !!!

    Pour info j'ai fait ce soir test sur Windows sur lequel j'ai installé, pour l'occasion, PyQt 4.8.5. Toutefois j'étais jusqu'à présent sur PyQt v4.5.4 (cause PyQwt) et je n'avais pas ce souci avec cette vieille version.

    Donc si je récapitule les pb de PyQt 4.8, il y a le removeWidgetItem et ce signal textChanged() de trop.

    Si qqun avait un avis (une info) sur le sujet...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  2. #2
    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
    Salut,

    Ca a été signalé,

    https://bugreports.qt.nokia.com//browse/QTBUG-15003

    mais sans suite manifestement.

Discussions similaires

  1. Réponses: 10
    Dernier message: 05/02/2011, 22h58
  2. Réponses: 0
    Dernier message: 11/01/2011, 21h29
  3. [TFS2010] Ajouter un developpeur pour corriger les bogues
    Par jubourbon dans le forum Visual Studio Team System
    Réponses: 0
    Dernier message: 03/06/2010, 13h23

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