2009-07-13 5 views
4

Я новичок в Python, и я пытаюсь написать тривиальное приложение с обработчиком событий, который активируется при нажатии элемента в настраиваемом QTreeWidget. По какой-то причине это не работает. Поскольку я только в начале изучения этого, я не могу понять, что я делаю неправильно. Вот код:PyQt: событие не срабатывает, что случилось с моим кодом?

#!/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() 

Моя первоначальная цель состоит в том, чтобы сделать MyTree.onClick() напечатать что-нибудь, когда я нажимаю элемент дерева (и иметь доступ к щелкнутому пункту в этом обработчик).

ответ

11

Вы должны были сказать

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

Обратите внимание, что говорит INT, а не столбец в первый аргумент SIGNAL. Вам также нужно только один раз сделать вызов connect для виджета дерева, а не один раз для каждого узла в дереве.

+1

Спасибо, это сработало! По какой-то причине мой браузер не позволит мне отмечать ваш ответ как принятый, но он работает. – 2009-07-13 13:36:23