PyQt - QLabel继承

时间:2009-06-07 19:38:55

标签: python qt inheritance pyqt label

我想继承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个标签。标签内容是pixmaps。所以标签中没有任何文字,所以我无法辨别标签之间的差异。我怎么能这样做?

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()

但是自己没有发件人对象。我做错了什么?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

  • 子类QLabel,覆盖mouseReleaseEvent并向类添加一个信号,让我们单击它调用它。
  • 检查在mouseReleaseEvent中单击了哪个按钮,如果是左侧按钮发出单击的信号。
  • 将插槽连接到标签点击信号,然后使用内部sender()了解点击了哪个QLabel。

答案 2 :(得分:1)

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