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

Fre*_*ind 16 python qt pyqt pyside

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

def center(self):
    qr = self.frameGeometry()
    cp = gui.QDesktopWidget().availableGeometry().center()
    qr.moveCenter(cp)
    self.move(qr.topLeft())
Run Code Online (Sandbox Code Playgroud)

小智 19

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

self.move(QtGui.QApplication.desktop().screen().rect().center()- self.rect().center())
Run Code Online (Sandbox Code Playgroud)


inv*_*inv 7

self.move(QDesktopWidget().availableGeometry().center() - self.frameGeometry().center())
Run Code Online (Sandbox Code Playgroud)


Dmi*_*riy 5

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

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

  move(center.x() - width() * 0.5, center.y() - height());
Run Code Online (Sandbox Code Playgroud)

  • 我认为最好在OP的代码中使用`frameGeometry()`而不是`width()`和`height()`([Qt.Window Geometry](http://developer.qt.nokia.com/doc/qt) -4.8 /应用windows.html#窗口几何形状)) (2认同)