2012-02-20 5 views
15

Ten kod działa, ale zastanawiam się, czy jest jakiś prostszy sposób:Jak zrobić widget na środku ekranu w PySide/PyQt?

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

To wydaje się jak prawo, jak można dostać się do mnie. – jdi

+1

Ładny fragment kodu ZetCode. Zastanawiałem się, czy jest jeszcze krótsza droga. –

Odpowiedz

5

Nie, to najprostszy sposób. Oto fragment Użyłem w C++:

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

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

Myślę, że lepiej jest użyć 'frameGeometry()' jak w kodzie OP zamiast 'width()' i 'height()' ([Qt. Geometria okna] (http://developer.qt.nokia.com/doc/ qt-4.8/application-windows.html # window-geometry)) – reclosedev

15

wystarczy dodać tę linię do głównego okna:

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

Zmieniłem drugi argument, aby był bardziej wyśrodkowany. –

1

Just another "func-style" przykładem. Jeśli używasz go kilka razy.

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

I za każdym razem w kodzie:

widget.move(screen_center(widget))