如何在PySide/PyQt中将小部件置于屏幕中央?

18

这段代码可以运行,但我想知道是否有更简单的方法:

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

5
在我看来,这似乎是最正确的了。 - jdi
1
来自ZetCode的一个不错的代码片段。我想知道是否还有更短的方法。 - Oleh Prypin
6个回答

20

只需在您的主窗口中添加此行:

self.move(QtGui.QApplication.desktop().screen().rect().center()- self.rect().center())

9
self.move(QDesktopWidget().availableGeometry().center() - self.frameGeometry().center())

我将第二个参数更改为使其更加居中。 - Dielson Sales

5
不,这是最简单的方法。下面是我在C++中使用过的代码片段:
  QRect desktopRect = QApplication::desktop()->availableGeometry(this);
  QPoint center = desktopRect.center();

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

3
我认为最好像 OP 的代码一样使用 frameGeometry() 而不是 width()height()Qt. 窗口几何)。 - reclosedev

2

这是一个“函数式”例子,如果您使用它多次。

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

每次在代码中:

widget.move(screen_center(widget))

2

QDesktopWidget已被弃用,请使用QScreen代替。

    def centerWidgetOnScreen(self, widget):
        centerPoint = QtGui.QScreen.availableGeometry(QtWidgets.QApplication.primaryScreen()).center()
        fg = widget.frameGeometry()
        fg.moveCenter(centerPoint)
        widget.move(fg.topLeft())

1

对我来说它有效:

from PySide2.QtGui import QGuiApplication

# ...

    def center(self):
        centerPoint = QGuiApplication.screens()[0].geometry().center()
        self.move(centerPoint - self.frameGeometry().center())


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接