2012-02-20 46 views
15

Questo codice funziona, ma mi chiedo se non v'è alcun modo semplice:Come creare un widget al centro dello schermo in PySide/PyQt?

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

Questo sembra quanto di destra, come si può arrivare a me. – jdi

+1

Un bel frammento di ZetCode. Mi chiedevo se ci fosse un modo più breve, anche. –

risposta

5

no, è il modo più semplice. Ecco un frammento che ho usato in C++:

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

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

Penso che sia meglio usare 'frameGeometry()' come nel codice OP invece 'width()' e 'height()' ([Qt. Window Geometry] (http://developer.qt.nokia.com/doc/ qt-4.8/application-windows.html # window-geometry)) – reclosedev

15

Basta aggiungere questa linea per le finestre principali:

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

Ho cambiato il secondo argomento per renderlo più centrato. –

1

Solo un altro esempio "func-style". Se lo usi più volte.

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

E ogni volta in codice:

widget.move(screen_center(widget)) 
Problemi correlati