为什么我的主窗口无法在屏幕上正确居中?

问题描述 投票:0回答:2

我试图将主窗口置于屏幕中央,但这两种常见方法都不起作用。他们都把它放得太低了,而且宽度有点偏离中心。这是我尝试过的:

方式一:

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)
python qt python-3.x pyqt pyqt5
2个回答
2
投票

您正在将小部件的左上角移动到屏幕中心,这就是它不居中的原因。您应该考虑小部件的大小。

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)

0
投票

尝试了所有解决方案后,我在pyside6中总结了唯一正确的方法。如果您在小部件中调用了 adjustmentsize(),则需要覆盖 resizeEvent 方法以获得正确的小部件尺寸:

    def resizeEvent(self, event):
        center = QtGui.QGuiApplication.primaryScreen().geometry().center()
        self.move(center - self.rect().center())

        return super().resizeEvent(event)
© www.soinside.com 2019 - 2024. All rights reserved.