2012-02-20 2 views
15

Этот код работает, но мне интересно, есть ли более простой способ:Как сделать виджет в центре экрана в PySide/PyQt?

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

Это кажется столь же верно, как вы можете получить его для меня. – jdi

+1

Красивый сниппет из ZetCode. Я подумал, есть ли еще более короткий путь. –

ответ

5

Нет, это самый простой способ. Вот фрагмент кода я использовал в C++:

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

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

Я думаю, что лучше использовать 'frameGeometry()' как в коде OP вместо 'width()' и 'height()' ([Qt. Window Geometry] (http://developer.qt.nokia.com/doc/ qt-4.8/application-windows.html # window-geometry)) – reclosedev

15

просто добавьте эту строку в ваших главных окон:

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

Я изменил второй аргумент, чтобы сделать его более центрированным. –

1

Просто еще один "Func стиле" пример. Если вы используете его несколько раз.

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

И каждый раз, когда в коде:

widget.move(screen_center(widget)) 
Смежные вопросы