Соедините событие двойного щелчка QListView с методом в PyQt4 - PullRequest
6 голосов
/ 22 декабря 2010

У меня есть объект PyQt QListView, и я хочу, чтобы метод запускался при двойном щелчке. Это должно быть тривиально, но, похоже, это не работает. Мой код выглядит следующим образом:

class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        lb = QListView()
        self.connect(lb, SIGNAL('doubleClicked()'), self.someMethod)

        grid = QGridLayout()
        grid.addWidget(lb, 0, 0)
        centralWidget.setLayout(grid)

    def someMethod(self):
        print "It happened!"

Я тоже пробовал методы clicked() и entered(), но они тоже не работают. Все эти события перечислены в документации здесь .

Ответы [ 3 ]

12 голосов
/ 23 декабря 2010

Вроде бы работает, если:

self.connect(lb, SIGNAL('doubleClicked()'), self.someMethod)

Заменен новым синтаксисом:

lb.doubleClicked.connect(self.someMethod)

Последний тоже намного элегантнее. Однако я до сих пор не знаю, почему оригинальный синтаксис не работал.

3 голосов
/ 31 декабря 2010

Это также будет работать, если вы используете:

self.connect(lb,QtCore.SIGNAL("itemDoubleClicked (QListWidgetItem *)"),self.someMethod)

проверьте ссылку на Pyqt, затем скопируйте и вставьте сигнал как есть.

Я знаю, вы уже решили это.но я думаю, что знание нескольких методов будет лучше.

1 голос
/ 13 марта 2012

itemDoubleClicked - это сигнал, излучаемый QListWidget, а не QListView.Я протестировал предложение Moayyad Yaghi, и оно не сработало для меня, по крайней мере, на Qt 4 с python 2.5

Хотя lb.doubleClicked.connect(self.someMethod) работает отлично.

...