2

我想继承 QLabel 以添加点击事件处理。我正在尝试这段代码:

class NewLabel(QtGui.QLabel):
    def __init__(self, parent):
        QtGui.QLabel.__init__(self, parent)

    def clickEvent(self, event):
        print 'Label clicked!'

但点击后我没有“标签点击!”行

编辑:

好的,现在我使用的不是“clickEvent”而是“mousePressEvent”。我还有一个问题。我怎么知道点击了什么标签?例如,我有 2 个编辑框和 2 个标签。标签内容是像素图。所以标签中没有任何文字,所以我无法辨别标签之间的区别。我怎样才能做到这一点?

EDIT2: 我做了这个代码:

class NewLabel(QtGui.QLabel):
    def __init__(self, firstLabel):
        QtGui.QLabel.__init__(self, firstLabel)

    def mousePressEvent(self, event):
        print 'Clicked'
        #myLabel = self.sender()  # None =)
        self.emit(QtCore.SIGNAL('clicked()'), "Label pressed")

在另一个班级:

self.FirstLang = NewLabel(Form)
QtCore.QObject.connect(self.FirstLang, QtCore.SIGNAL('clicked()'), self.labelPressed)

插槽在同一类:

def labelPressed(self):
    print 'in labelPressed'
    print self.sender()

但是 self 中没有 sender 对象。我做错了什么?

4

3 回答 3

2

QWidget/QLabel中没有函数clickEvent。您可以将该函数连接到 Qt 信号,或者您可以这样做:

class NewLabel(QtGui.QLabel):
    def __init__(self, parent=None):
        QtGui.QLabel.__init__(self, parent)
        self.setText('Lorem Ipsum')

    def mouseReleaseEvent(self, event):
        print 'Label clicked!'
于 2009-06-07T20:15:51.067 回答
1

PyQt Wiki的答案非常有效,但我要补充一点,clickable该类应该调用widget.mouseReleaseEvent(就在之前return True),以防万一用户自定义了此事件。

于 2012-01-27T19:00:20.947 回答
1

回答您的第二个问题,我将继续基于@gnud 示例:

  • 子类 QLabel,覆盖 mouseReleaseEvent 并向类添加一个信号,我们称之为单击。
  • 检查在 mouseReleaseEvent 中单击了哪个按钮,如果它是左侧的,则发出单击信号。
  • 将一个插槽连接到您的标签单击信号,并在内部使用sender()来了解单击了哪个 QLabel。
于 2009-06-07T21:04:12.203 回答