Задать
self.setWindowFlags(QtCore.Qt.Dialog). или создать его как диалоговое окно
QtWidget.QDialog(parent).
Qt::Dialog - Указывает, что виджет представляет собой окно, которое должно быть оформлено как диалоговое окно (т. е. обычно в строке заголовка нет кнопок развертывания и свертывания). Это тип по умолчанию дляQDialog. Если вы хотите использовать его в качестве модального диалога, его следует запускать из другого окна или иметь родительский элемент и использовать сQWidget::windowModalityсвойство. Если вы сделаете его модальным, диалоговое окно не позволит другим окнам верхнего уровня приложения получать какие-либо данные. Мы ссылаемся на окно верхнего уровня, у которого есть родительский элемент, как на вторичное окно.
https://doc.qt.io/qt-5/qt.html#WindowModality-enum
Мне этот вариант подашёл. При открытии вторых окон родительское окно блокируется. У QDialog по умолчанию стоит флаг Dialog, но не смотря на это с этим флагом появляется эффект затемнения родительского окна, что мне понравилось.
class Window(QtWidgets.QMainWindow):
def __init__(self):
super(Window, self).__init__()
# .... code
self.show()
def _openSettings(self):
WindowSettings(self)
class WindowSettings(QtWidgets.QDialog):
def __init__(self, window):
super(WindowSettings, self).__init__(window, QtCore.Qt.Window)
self.setWindowFlags(QtCore.Qt.Dialog)
self.setWindowModality(QtCore.Qt.WindowModal)
# .... code
self.show()
def save(self):
# code saveing К примеру self.window.setSettings(arg)
self.deleteLater()