如何在PySide / PyQt的屏幕中心制作一个小部件?

时间:2012-02-20 08:12:41

标签: python qt pyqt pyside

此代码有效,但我想知道是否有更简单的方法:

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

6 个答案:

答案 0 :(得分:19)

只需将此行添加到主窗口:

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

答案 1 :(得分:7)

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

答案 2 :(得分:5)

不,这是最简单的方法。这是我在C ++中使用的片段:

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

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

答案 3 :(得分:1)

另一个" func-style"例。如果你多次使用它。

{
    "jsonapi": {
        "version": "1.0"
    },
    "links": {
    },
    "data": [
        {
            "type": "versions",
            "id": "urn:adsk.wipprod:fs.file:vf.00UeaES1TmW67ZUDMfSn1A?version=3",
            "attributes": {
                "name": "56750_A.rvt",
                "displayName": "56750_A.rvt",
                }
            }       
        }
    ],
    "included": [
        {
            "type": "items",
            "id": "urn:adsk.wipprod:dm.lineage:00UeaES1TmW67ZUDMfSn1A",
            "attributes": {
                "displayName": "343435_A.rvt",

            }
        }
    ]
}

每次都在代码中:

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

答案 4 :(得分:1)

已弃用QDesktopWidget。请改用QScreen。

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

答案 5 :(得分:0)

它对我有用:

from PySide2.QtGui import QGuiApplication

# ...

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