当我.show()
对话时,它通常会向左侧显示一点,我不知道为什么。我想把所有打开的对话框放在中心,所以我用过:
qr = dlgNew.frameGeometry()
cp = QtGui.QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
dlgNew.move(qr.topLeft())
还有:
sG = QtGui.QApplication.desktop().screenGeometry()
x = (sG.width()-dlgMain.width()) / 2
y = (sG.height()-dlgMain.height()) / 2
dlgMain.move(x,y)
dlgMain.show()
我的问题是,这是正确/更好的使用方式,有什么区别?
答案 0 :(得分:6)
如果您没有明确指定一个位置,Qt会让操作系统的窗口管理器决定放置窗口的位置。在您的情况下,“向左一点”是您的窗口管理员决定的。
至于这两种方法,存在一些差异。
首先,.availableGeometry()
vs .screenGeometry()
。 .screenGeometry()
为您提供整个屏幕矩形。在.availableGeometry()
的位置,返回可用的矩形。这是排除某些永久组件(如Windows中的任务栏)的区域。 (Docs explaining the differences)
其次,.frameGeometry()
vs width()/height()
。 .frameGeometry()
返回窗口占据屏幕的总面积。另一方面,width()/height()
会返回窗口内的width
和height
,其中不包括窗口框,标题栏等。(Docs explaining the differences)
考虑到这些,我会说第一种方法更合适。
答案 1 :(得分:2)
根据文件;
对话框始终是顶级窗口小部件,但如果它具有父级,则为 默认位置位于父级顶级窗口小部件的顶部 (如果它本身不是顶级的)。它也将分享父母的 任务栏条目。
我不确定您是否只想在启动时将主窗口置于中心位置,但如果您想将模态对话框置于中心位置,则只需制作主窗口模态对话框的父级通过调用...
setParent (self, QWidget parent)
或从init
执行此操作__init__ (self, QWidget parent =YOUR_MAIN_WINDOW_HERE)
希望有所帮助!