Я разрабатываю приложение в PyQT5, в котором вверху находится объект QWidget
. Это приложение должно иметь возможность работать в режиме «киоск», поэтому моя цель состоит в том, чтобы сделать это верхнее QWidget
модальным и предотвратить фокусировку любого другого работающего приложения.
Скелет основного класса ниже. Обратите внимание, что я вызываю метод setWindowModality()
, который теоретически устанавливает выбранное поведение окна:
class MyApp(QWidget):
def __init__(self):
QWidget.__init__(self)
self.setWindowModality(3)
Мой основной метод заключается в следующем:
app = QApplication(sys.argv)
MyApp()
sys.exit(app.exec_())
Согласно документации метода setWindowModality()
:
Qt.NonModal 0 Окно не является модальным и не блокирует ввод в другие окна.
Qt.WindowModal 1 Окно является модальным по отношению к иерархии одного окна и блокирует ввод в свое родительское окно, все родительские окна и все родственные окна родительского и родительского окон.
Qt.ApplicationModal 2 Окно является модальным для приложения и блокирует ввод во все окна.
Проблема в том, что окно вообще не модальное, я могу переключиться на другое приложение (скажем, веб-браузер), что я и хочу предотвратить. Я также пробовал 1, 2, 3 в качестве значений, и они дают такое же поведение.
Я боюсь, что это может быть конструктивное ограничение, чтобы приложения не блокировали другие приложения, но я не уверен в этом и не могу это подтвердить.
Я пропустил что-то очевидное здесь? В случае, если проблема заключается в ограничении дизайна, есть ли способ имитировать модальное окно?
nodm
. 31.10.2016