I’ve got a PyQt QListView
object, and I want a method to run when it is double-clicked. This sh开发者_如何转开发ould 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.
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.
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.
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.
精彩评论