2009-07-13 4 views
4

Je suis un débutant Python et j'essaye d'écrire une application triviale avec un gestionnaire d'événement qui est activé quand un article dans un QTreeWidget personnalisé est cliqué. Pour une raison quelconque, cela ne fonctionne pas. Puisque je ne suis qu'au début de l'apprentissage, je n'arrive pas à comprendre ce que je fais de mal. Voici le code:PyQt: l'événement n'est pas déclenché, quel est le problème avec mon code?

#!/usr/bin/env python 

import sys 

from PyQt4.QtCore import SIGNAL 

from PyQt4.QtGui import QApplication 
from PyQt4.QtGui import QMainWindow 
from PyQt4.QtGui import QTreeWidget 
from PyQt4.QtGui import QTreeWidgetItem 

class MyTreeItem(QTreeWidgetItem): 

    def __init__(self, s, parent = None): 

     super(MyTreeItem, self).__init__(parent, [s]) 

class MyTree(QTreeWidget): 

    def __init__(self, parent = None): 

     super(MyTree, self).__init__(parent) 
     self.setMinimumWidth(200) 
     self.setMinimumHeight(200) 
     for s in ['foo', 'bar']: 
      MyTreeItem(s, self) 
     self.connect(self, SIGNAL('itemClicked(QTreeWidgetItem*, column)'), self.onClick) 

    def onClick(self, item, column): 

     print item 

class MainWindow(QMainWindow): 

    def __init__(self, parent = None): 

     super(MainWindow, self).__init__(parent) 
     self.tree = MyTree(self) 

def main(): 

    app = QApplication(sys.argv) 
    win = MainWindow() 
    win.show() 
    app.exec_() 

if __name__ == '__main__': 
    main() 

Mon objectif initial est de faire quelque chose d'impression MyTree.onClick() lorsque je clique sur un élément d'arbre (et avoir accès à l'élément cliqué dans ce gestionnaire).

Répondre

11

Vous devriez avoir dit

self.connect(self, SIGNAL('itemClicked(QTreeWidgetItem*, int)'), self.onClick) 

avis il dit int plutôt que colonne dans le premier argument de SIGNAL. Vous n'avez également besoin de faire l'appel connect qu'une fois pour le widget de l'arborescence, pas une fois pour chaque nœud de l'arborescence.

+1

Merci, ça a marché! Pour une raison quelconque, mon navigateur ne me permettra pas de marquer votre réponse comme acceptée, mais cela fonctionne. –

Questions connexes