我试图将主窗口置于屏幕中央,但这两种常见方法都不起作用。他们都把它放得太低了,而且宽度有点偏离中心。这是我尝试过的:
screen = QDesktopWidget().screenGeometry()
x = int((screen.width() - self.width()) / 2)
y = int((screen.height() - self.height()) / 2)
self.move(x, y)
self.setGeometry(QStyle.alignedRect(Qt.LeftToRight, Qt.AlignCenter, self.size(),
QDesktopWidget().availableGeometry()))
请注意,在执行此操作之前,我像这样设置宽度和高度:
screen = QDesktopWidget().screenGeometry()
ww = int(screen.width() / 1.5)
wh = int(screen.height() / 2)
self.resize(ww, wh)
您正在将小部件的左上角移动到屏幕中心,这就是它不居中的原因。您应该考虑小部件的大小。
x = QApplication().desktop().screenGeometry().center().x()
y = QApplication().desktop().screenGeometry().center().y()
self.move(x - self.geometry().width()/2, y - self.geometry().height()/2)
编辑:
如果 self 是主窗口,则此方法有效。如果它是具有父级的小部件,则 move will move(x,y) 会将您的小部件相对于其父级移动。您应该使用以下方法将下面的坐标(全局坐标)转换为父坐标:
QPoint QWidget.mapFromGlobal (self, QPoint)
尝试了所有解决方案后,我在pyside6中总结了唯一正确的方法。如果您在小部件中调用了 adjustmentsize(),则需要覆盖 resizeEvent 方法以获得正确的小部件尺寸:
def resizeEvent(self, event):
center = QtGui.QGuiApplication.primaryScreen().geometry().center()
self.move(center - self.rect().center())
return super().resizeEvent(event)