import sys from PyQt4 import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() self.inFocus = ('', '') # Элемент (и его данные), который последним был в фокусе def initUI(self): self.setGeometry(300, 300, 280, 170) self.setWindowTitle('Hello!') self.a = QtGui.QLineEdit(self) self.a.installEventFilter(self) self.a.move(60, 50) self.a.setFocus() self.b = QSelectPath(self) self.b.installEventFilter(self) self.b.move(60, 100) def eventFilter(self, obj, event): if obj == self.inFocus[0]: if event.type() == QtCore.QEvent.FocusOut: print('Фокус потерян') else: if event.type() == QtCore.QEvent.FocusIn: self.inFocus = (obj, obj.text()) print('В фокусе') return False class QSelectPath(QtGui.QWidget): """ Виджет для выбора пути к папке """ def __init__(self, parent=None): super(QSelectPath, self).__init__(parent) self.buildWidget() def buildWidget(self): mainLayout = QtGui.QHBoxLayout() mainLayout.setContentsMargins(0, 0, 0, 0) # Убираем внешние отступы у компановщика self.path = QtGui.QLineEdit(self) self.path.setReadOnly(True) overview = QtGui.QPushButton('Обзор', self) self.connect(overview, QtCore.SIGNAL('clicked()'), self.chooseFile) mainLayout.addWidget(self.path) mainLayout.addWidget(overview) self.setLayout(mainLayout) def chooseFile(self): """ Открывает диалоговое окно выбора папки """ path = QtGui.QFileDialog.getExistingDirectory(self, 'Выберите папку') if path: self.path.setText(path) def text(self): return self.path.text() def setText(self, string): self.path.setText(string) if __name__ == '__main__': app = QtGui.QApplication(sys.argv) window = Example() window.show() sys.exit(app.exec_())