Problème avec QTreeWidget.removeItemWidget PyQt 4.8.4 et version suivante
Bonjour à tous
J'ai un problème avec QTreeWidget.removeItemWidget qui s'est déclaré avec PyQt v4.8.4 et qui perdure avec PyQt v4.8.5. Jusqu'à présent le removeItemWidget fonctionnait nickel et depuis 4.8.4 il ne fonctionne plus
J'ai écrit un petit code test tout simple: un QTreeWidget avec un bouton "+" pour ajouter des item et un bouton "-" pour supprimer le dernier item
Code:
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 90 91 92 93 94 95 96 97
| #!/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értié
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 qtreewidget")
# 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())
# La zone d'items et son scroll
self.__tabItem=[]
self.__treeItem=QTreeWidget()
# La zone des boutons
layoutBtn=QVBoxLayout()
# Les boutons + et -
self.__add=QPushButton("+")
self.connect(self.__add, SIGNAL("clicked()"), self.__addItem)
self.__sub=QPushButton("-")
self.__sub.setEnabled(False)
self.connect(self.__sub, SIGNAL("clicked()"), self.__subItem)
for i in range(10): self.__addItem()
# Pour quitter
quit=QPushButton()
quit.setText("Quitter")
self.connect(quit, SIGNAL("clicked()"), self.__mainWid, SLOT("close()"))
# Rangement des boutons
layoutBtn.addWidget(self.__add)
layoutBtn.addWidget(self.__sub)
layoutBtn.addWidget(quit)
# Rangement général
mainLayout.addWidget(self.__treeItem)
mainLayout.addLayout(layoutBtn)
# __init__()
# Ajout d'élément
def __addItem(self):
print "add %d" % len(self.__tabItem)
self.__tabItem.append(QTreeWidgetItem(QStringList(QString("Hello %d" % len(self.__tabItem)))))
self.__treeItem.addTopLevelItem(self.__tabItem[-1])
self.__sub.setEnabled(True)
# __addItem
# Suppression d'élément
def __subItem(self):
print "sub %d" % len(self.__tabItem)
self.__treeItem.removeItemWidget(self.__tabItem[-1], 0)
del self.__tabItem[-1]
if len(self.__tabItem) == 0: self.__sub.setDisabled(True)
# __subItem
# Affichage et lancement application
def run(self):
self.__mainWid.show()
self.exec_()
# run()
# class QtAppli
Appli=QtAppli(sys.argv)
Appli.run() |
Ce code fonctionne à la perfection avec PyQt jusqu'à 4.8.3 mais ne fonctionne plus avec 4.8.4 et 4.8.5 (le dernier à ce jour). J'arrive bien à ajouter des item mais la méthode remove ne fonctionne plus.
Donc j'aimerais bien avoir les avis des connaisseurs savoir si qqun a rencontré le même souci, ou alors si la façon de faire a changé...
Merci à tous.