PyQt: событие не вызвано, что не так с моим кодом? - PullRequest
4 голосов
/ 13 июля 2009

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

#!/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 () что-то печатать, когда я щелкаю элемент дерева (и у меня есть доступ к выбранному элементу в этом обработчике).

1 Ответ

11 голосов
/ 13 июля 2009

Ты должен был сказать

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...