Ventana central de PyQt4 en pantalla activa

¿Cómo puedo centrar la ventana en la pantalla activa pero no en la pantalla general? Este código mueve la ventana al centro en la pantalla general, no en la pantalla activa:

import sys from PyQt4 import QtGui class MainWindow(QtGui.QWidget): def __init__(self): super(MainWindow, self).__init__() self.initUI() def initUI(self): self.resize(640, 480) self.setWindowTitle('Backlight management') self.center() self.show() def center(self): frameGm = self.frameGeometry() centerPoint = QtGui.QDesktopWidget().availableGeometry().center() frameGm.moveCenter(centerPoint) self.move(frameGm.topLeft()) def main(): app = QtGui.QApplication(sys.argv) mainWindow = MainWindow() sys.exit(app.exec_()) if __name__ == '__main__': main() 

Si elimino self.center () de initUI () , la ventana se abre en 0x0 en la pantalla activa. Necesito abrir la ventana en la pantalla activa y mover esta ventana en el centro de esta pantalla. Gracias

Modifique su método center para que sea como sigue:

 def center(self): frameGm = self.frameGeometry() screen = QtGui.QApplication.desktop().screenNumber(QtGui.QApplication.desktop().cursor().pos()) centerPoint = QtGui.QApplication.desktop().screenGeometry(screen).center() frameGm.moveCenter(centerPoint) self.move(frameGm.topLeft()) 

Esta función se basa en la ubicación del punto del mouse. Utiliza la función screenNumber para determinar en qué pantalla está activo actualmente el mouse. Luego encuentra la pantalla Geometría de ese monitor y el punto central de esa pantalla. Con este método, debería poder colocar la ventana en el centro de una pantalla incluso si las resoluciones del monitor son diferentes.

Una corrección para los usuarios de PyQt5:

 import PyQt5 def center(self): frameGm = self.frameGeometry() screen = PyQt5.QtWidgets.QApplication.desktop().screenNumber(PyQt5.QtWidgets.QApplication.desktop().cursor().pos()) centerPoint = PyQt5.QtWidgets.QApplication.desktop().screenGeometry(screen).center() frameGm.moveCenter(centerPoint) self.move(frameGm.topLeft())