Qt 将QMessageBox移动到屏幕的右下角

Qt 将QMessageBox移动到屏幕的右下角,qt,pyqt,qt5,pyside,pyqt5,Qt,Pyqt,Qt5,Pyside,Pyqt5,我想将QMessageBox移动到屏幕的右下角,下面是我的代码,但并没有按预期工作,任何人都可以解释为什么?如何解决这里的问题 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * def moveToBottomRight(msgBox): msgBox.addButton("重计", QMessageBox.ActionRole) ms

我想将QMessageBox移动到屏幕的右下角,下面是我的代码,但并没有按预期工作,任何人都可以解释为什么?如何解决这里的问题

import sys

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


def moveToBottomRight(msgBox):

    msgBox.addButton("重计", QMessageBox.ActionRole)
    msgBox.addButton("停计", QMessageBox.ActionRole)
    msgBox.addButton('继续', QMessageBox.ActionRole)

    screenGeometry = QApplication.desktop().availableGeometry()
    screenGeo = screenGeometry.bottomRight()

    msgGeo = msgBox.frameGeometry()

    msgGeo.moveBottomRight(screenGeo)

    msgBox.move(msgGeo.topLeft())


def main():

    app = QApplication(sys.argv)

    msgBox = QMessageBox()
    moveToBottomRight(msgBox)
    msgBox.show()

    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
msgBox.frameGeometry()
未获取有效值,这是因为未显示消息框。您应该像这样使用
sizeHint()

msgGeo = QRect(QPoint(0,0), msgBox.sizeHint())

sizeHint
保存小部件的建议大小。如果小部件有布局,它的默认实现将返回布局的首选大小。

我认为在
msgBox
之前,它的ti帧(大小)未定义,因此您使用的计算值无效。@MarekR似乎是对的,当将moveToBottomRight(msgBox)放在msgBox.show()之后时,它可以按照我的要求工作,但是msgBox先显示在起始位置,然后立即移动到目标位置,如何让它直接显示在目标位置而不首先显示在起始位置?@iMath如果调用
msgBox.ensureProlished(),它是否工作正常在你得到它的帧几何体之前?@MarekR在像这样更改代码之后,满怀期待地工作着codepad.org/KiifTwPB@thuga在像这样修改代码后,codepad.org/KiifTwPBI已经在Win7上测试了您的建议,事实是msgBox部分被任务栏隐藏,这不是我想要的。您是否尝试过
screenGeometry()
而不是
availableGeometry()
?当更改为screenGeometry()时,会隐藏更多区域,然后您可以使用类似
screenGeometry=QApplication.desktop().availableGeometry()的内容。调整(0,0,-100)
来调整屏幕几何体的底部。您可以将
100
值更改为适当的值。