Events with pyKDE 0.8.
Henning Schroeder
hschroeder at gmx.net
Tue Aug 3 09:49:36 EDT 1999
Peter Torstenson <p.t at iname.com> wrote:
> I have defined an event as follows.
> [..]
> Now. this works fine on the mainwidget. But how do I define it to work with
> a widget placed on the main widget. Ex, a label.
Look at the source below. You have got two possibilities to solve your problem.
Either you create you own label through subclassing QLabel and implementing
mousePresEvent or you can catch the events for a simple QLabel with
installEventFilter. The second method is quite cool because you can use it with
any widget without sub-classing (I'm working on a dialog-editor using this
feature). Unfortunately you cannot (as far as I known) convert the QEvent to
QMouseEvent in eventFilter. In C++ it is simple macro (definded in qevent.h)
but pyKDE does not support this (even not in pyKDE 0.9pre2 :-( ). This would
be necessary to access to mouse position.
Greets
Henning
--------------------------------------------------------------
from kde import *
class MyLabel(QLabel):
def mousePressEvent(self, event):
print "mouse button on %s pressed" % self
class Window(QDialog):
def __init__(self, *args):
apply(QDialog.__init__, (self,) + args)
self.label1 = QLabel("Hello", self)
self.label1.installEventFilter(self) # catch events
self.label2 = MyLabel("World!", self)
self.label2.move(self.label1.width(), 0)
def eventFilter(self, object, event):
if event.type() == Event_MouseButtonPress:
print "mouse button on %s pressed" % object
return 1 # event handled
else:
return 0 # pass event to next handler
import sys
app = QApplication(sys.argv)
win = Window()
app.setMainWidget(win)
app.mainWidget().show()
app.exec_loop()
More information about the Python-list
mailing list