PyQt4中心对话框窗口的最佳方法是什么?

时间:2012-09-14 22:23:57

标签: qt4 python-2.7 pyqt4 window-position

当我.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()

我的问题是,这是正确/更好的使用方式,有什么区别?

2 个答案:

答案 0 :(得分:6)

如果您没有明确指定一个位置,Qt会让操作系统的窗口管理器决定放置窗口的位置。在您的情况下,“向左一点”是您的窗口管理员决定的。

至于这两种方法,存在一些差异。

首先,.availableGeometry() vs .screenGeometry().screenGeometry()为您提供整个屏幕矩形。在.availableGeometry()的位置,返回可用的矩形。这是排除某些永久组件(如Windows中的任务栏)的区域。 (Docs explaining the differences

其次,.frameGeometry() vs width()/height().frameGeometry()返回窗口占据屏幕的总面积。另一方面,width()/height()会返回窗口内的widthheight ,其中不包括窗口框,标题栏等。(Docs explaining the differences

考虑到这些,我会说第一种方法更合适。

答案 1 :(得分:2)

根据文件;

  

对话框始终是顶级窗口小部件,但如果它具有父级,则为   默认位置位于父级顶级窗口小部件的顶部   (如果它本身不是顶级的)。它也将分享父母的   任务栏条目。

我不确定您是否只想在启动时将主窗口置于中心位置,但如果您想将模态对话框置于中心位置,则只需制作主窗口模态对话框的父级通过调用...

setParent (self, QWidget parent)

或从init

执行此操作
__init__ (self, QWidget parent =YOUR_MAIN_WINDOW_HERE)

希望有所帮助!

相关问题