Вам просто нужно использовать QGuiApplication.primaryScreen()
(или QGuiApplication.screens()[i]
, если вы хотите центрироваться на экране i-esima), как показано ниже:
from PyQt5 import QtCore, QtGui, QtWidgets
# or
# from PySide2 import QtCore, QtGui, QtWidgets
def center_window(widget):
window = widget.window()
window.setGeometry(
QtWidgets.QStyle.alignedRect(
QtCore.Qt.LeftToRight,
QtCore.Qt.AlignCenter,
window.size(),
QtGui.QGuiApplication.primaryScreen().availableGeometry(),
),
)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QMainWindow()
w.resize(640, 480)
w.show()
QtCore.QTimer.singleShot(0, lambda: center_window(w))
sys.exit(app.exec_())