2012-02-20 16 views
15

Este código funciona, pero me pregunto si hay alguna manera más simple:¿Cómo hacer un widget en el centro de la pantalla en PySide/PyQt?

def center(self): 
    qr = self.frameGeometry() 
    cp = gui.QDesktopWidget().availableGeometry().center() 
    qr.moveCenter(cp) 
    self.move(qr.topLeft()) 
+4

Esto parece tan correcta como se puede llegar a mí. – jdi

+1

Un buen fragmento de ZetCode. Me preguntaba si también había un camino más corto. –

Respuesta

5

No, es la forma más sencilla. Aquí hay un fragmento que he utilizado en C++:

QRect desktopRect = QApplication::desktop()->availableGeometry(this); 
    QPoint center = desktopRect.center(); 

    move(center.x() - width() * 0.5, center.y() - height()); 
+2

Creo que es mejor usar 'frameGeometry()' como en el código de OP en lugar de 'width()' y 'height()' ([Qt. Window Geometry] (http://developer.qt.nokia.com/doc/ qt-4.8/application-windows.html # window-geometry)) – reclosedev

15

acaba de añadir esta línea a sus ventanas principales:

self.move(QtGui.QApplication.desktop().screen().rect().center()- self.rect().center()) 
7
self.move(QDesktopWidget().availableGeometry().center() - self.frameGeometry().center()) 
+0

Cambié el segundo argumento para hacerlo más centrado. –

1

sólo otro ejemplo de "estilo func". Si lo usa varias veces

screen_center = lambda widget: QApplication.desktop().screen().rect().center()- widget.rect().center() 

Y cada vez en código:

widget.move(screen_center(widget)) 
Cuestiones relacionadas