Paul
Paul

Reputation: 16833

Connect double-click event of QListView with method in PyQt4

I’ve got a PyQt QListView object, and I want a method to run when it is double-clicked. This should be trivial, but it doesn't seem to work. My code is as follows:

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!"

I’ve tried clicked() and entered() methods too, but they do not work either. These events are all listed in the documentation here.

Upvotes: 8

Views: 28270

Answers (3)

Rahul Singh
Rahul Singh

Reputation: 11

itemDoubleClicked is a signal emitted by QListWidget and not QListView. I tested Moayyad Yaghi's suggestion and it did not work for me at least on Qt 4 with python 2.5

Though, lb.doubleClicked.connect(self.someMethod) works perfectly fine.

Upvotes: 1

Moayyad Yaghi
Moayyad Yaghi

Reputation: 3722

It will also work if you use:

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

check the pyqt reference, then copy and paste the signal as is.

I know you already solved it. but I think knowing more than one method will be better.

Upvotes: 3

Paul
Paul

Reputation: 16833

It seems to work if:

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

Is replaced with the new syntax of:

lb.doubleClicked.connect(self.someMethod)

The latter is much more elegant too. I still do not know why the original syntax did not work, however.

Upvotes: 14

Related Questions