PyQt - 继承QLabel
我想要继承QLabel这个类,以便在里面添加点击事件的处理。
我试了这个代码:
class NewLabel(QtGui.QLabel):
def __init__(self, parent):
QtGui.QLabel.__init__(self, parent)
def clickEvent(self, event):
print 'Label clicked!'
但是点击后,我没有看到'Label clicked!'这行信息。
编辑:
好吧,现在我不是用'clickEvent',而是用'mousePressEvent'。不过我还有一个问题。我怎么知道到底是哪个标签被点击了?比如,我有两个输入框和两个标签。标签的内容是图片,所以标签里没有文字,我无法区分这两个标签。我该怎么做呢?
编辑2:
我写了这个代码:
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里没有发送者对象。我哪里做错了?
3 个回答
1
来自PyQt Wiki的答案效果很好,但我想补充一点,clickable
这个类应该在return True
之前调用widget.mouseReleaseEvent
,以防用户对这个事件进行了自定义。
3
在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
针对你的第二个问题,我会继续基于@gnud的例子来讲:
- 首先,创建一个QLabel的子类,重写鼠标释放事件(mouseReleaseEvent),并在这个类里添加一个信号,我们可以叫它clicked。
- 在鼠标释放事件中,检查是哪个按钮被点击了,如果是左键,就发出clicked信号。
- 把一个槽(slot)连接到你标签的clicked信号上,然后在槽里使用 sender() 来判断是哪个QLabel被点击了。