将QListView的双击事件连接到PyQt4中的方法

8 投票
3 回答
27285 浏览
提问于 2025-04-16 08:54

我有一个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 个回答

1

itemDoubleClicked 是由 QListWidget 发出的信号,而不是 QListView。我测试了 Moayyad Yaghi 的建议,但在 Qt 4 和 Python 2.5 上对我来说没有用。

不过,lb.doubleClicked.connect(self.someMethod) 运行得非常好。

3

如果你使用以下代码,也会有效:

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

查看一下pyqt的参考资料,然后直接复制粘贴信号的内容。

我知道你已经解决了这个问题,但我觉得了解多种方法会更好。

13

看起来如果这样做就能正常工作:

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

可以用新的写法替换成:

lb.doubleClicked.connect(self.someMethod)

后者看起来也更简洁。不过,我还是不明白为什么原来的写法不行。

撰写回答