[PyQt] QWidget focusInEvent() ?
Mark Summerfield
mark at qtrac.eu
Thu May 29 17:30:10 BST 2008
On 2008-05-29, B Clowers wrote:
> I have what would seem to be a fairly small problem. My
> application has a main window that currently has the ability to spawn
> a number of Non-Modal QWidgets in their own respective windows.
> I need to emit or catch a signal that is produced whenever a
> particular QWidget in its own window gets the focus. After
> looking at the documentation I can't seem to find a particular signal
> that is emitted. Does anyone have an idea how to accomplish this
> task?
It isn't quite so simple because focus is not a high level abstract
behaviour which signals and slots are for, but a low level detail. So
I think you'll have to use the event handling mechanism.
Here's something that works for me on Linux, i.e., if I run it as soon
as it appears it prints "got the focus", then if I Alt+Tab to another
window and then back it prints it again:
import sys
from PyQt4 import QtGui, QtCore
class EventFilter(QtCore.QObject):
def __init__(self, parent=None):
QtCore.QObject.__init__(self, parent)
def eventFilter(self, obj, event):
if event.type() == QtCore.QEvent.ActivationChange:
if self.parent().isActiveWindow():
print "got the focus"
return QtCore.QObject.eventFilter(self, obj, event)
class TestWidget(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.installEventFilter(EventFilter(self))
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Test Widget')
quit = QtGui.QPushButton('Close', self)
quit.setGeometry(10, 10, 60, 35)
self.connect(quit, QtCore.SIGNAL('clicked()'),
QtGui.qApp, QtCore.SLOT('quit()'))
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
tw = TestWidget()
tw.show()
sys.exit(app.exec_())
--
Mark Summerfield, Qtrac Ltd., www.qtrac.eu
More information about the PyQt
mailing list