Для примера отлично подходит QMessageBox. Когда появляется окошко QMessageBox с сообщением, остальные окна приложения блокируются и становятся некликабельными. Мне же нужно чтобы роль QMessageBox'а исполняла целая форма с кучей контролов (назовем ее, к примеру, login_form). Т.е. при появлении этой login_form другая форма (main_form) должна блокироваться и возвращать полученный фокус к login_form.
Я перепробовал довольно много вариантов. Все, до чего пока дошел:
# в объявлении класса login_form
def focusOutEvent(self, event):
self.activateWindow()
Это замечательно работает если фокус до его потери был на самом фоновом QWidget'е. Однако на login_form лежат еще и два QLineEdit'а (ln_email и ln_password). Как обработать потерю фокуса этими едитами так, чтобы он возвращался на login_form? При этом потерянный фокус может перейти и на другой контрол на этой же форме login_form (при этом, конечно, никакой фокус возвращать не надо). Интерфейс создавался в Qt Creator'e и переведен в питоновский модуль командой pyuic4 login_form.ui > login_form.py. Итого, сейчас я имею:
def focusOutEvent_form:
login_form.activateWindow()
def focusOutEvent_control:
if application.activeWindow() == login_form().window():
return
focusOutEvent_form:
class LoginForm(QtGui.QMainWindow):
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_LoginForm()
self.ui.setupUi(self)
self.focusOutEvent = focusOutEvent_form
self.ui.ln_edit.focusOutEvent = focusOutEvent_control
self.ui.ln_password.focusOutEvent = focusOutEvent_control
Все это работает только если передать фокус другой форме. При передаче же фокуса другому контролу на этой же login_form начинаются непонятные глюки: фокус имеют сразу 2(!) QLineEdit'а. Да и выглядит как-то убого... вроде. Кто-нибудь знает прямой и понятный способ решить мою проблемку? Чувствую что легко и я не прав, но понятия не имею как.