2009-06-07 108 views
2

我想继承QLabel添加那里点击事件处理。 我想这样的代码:PyQt - 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() 

但没有发送者对象在自己。我做错了什么?

+0

我不知道PyQt是如何工作的,但是你从QObject获得sender(),那么labelPressed插槽的类是否继承自QObject?它应该是因为它有一个槽...至少在C++中。 – 2009-06-08 08:19:34

回答

1

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

  • 子QLabel,覆盖mouseReleaseEvent并添加给班上的信号,我们称之为点击。
  • 检查在mouseReleaseEvent中点击了哪个按钮,如果是左边的则发出点击信号。
  • 将插槽连接到您的标签点击信号并使用里面的sender()来知道哪个QLabel被点击。
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

PyQt Wiki作品的回答非常好,但我想补充的是,clickable类应该调用widget.mouseReleaseEventreturn True前右),以防用户已经定制了这个事件。

+0

好点 - 但对于`eventFilter`来说,在所有情况下简单地`返回False`是更正确的(因为它实际上并不处理事件)。 – ekhumoro 2012-01-27 23:37:25