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

PyQt4使对话框窗口居中的最佳方法是什么?,qt4,python-2.7,pyqt4,window-position,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.

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

我的问题是,哪种使用方法正确/更好,区别是什么?

如果没有明确指定位置,Qt将让操作系统的窗口管理器决定将窗口放置在何处。在您的情况下,“稍微向左”是您的窗口管理器决定的

至于这两种方法,有一些不同之处

首先,
.availableGeometry()
vs
.screenGeometry()
.screenGeometry()
提供屏幕的整个矩形。其中as
.availableGeometry()
,返回可用矩形。这是某些永久性组件(如Windows中的任务栏)被排除在外的区域。()

其次,
.frameGeometry()
vs
width()/height()
.frameGeometry()
返回窗口在屏幕上占据的总面积。另一方面,
width()/height()
返回窗口内部的
width
height
,不包括窗口框架、标题栏等()


考虑到这些,我认为第一种方法更合适

对话框始终是顶级小部件,但如果它有父级,则其 默认位置集中在父级顶级小部件的顶部 (如果不是顶级本身)。它还将共享父母的 任务栏条目

我不确定您是否只想在启动时将主窗口居中,但如果您想将模式对话框居中,只需通过调用,将主窗口设置为模式对话框的父窗口即可

setParent (self, QWidget parent)
或者从init开始这样做

__init__ (self, QWidget parent =YOUR_MAIN_WINDOW_HERE)

希望有帮助

具体来说,我不确定,但一般来说,您不想使用屏幕大小,因为任务栏占据了它的一部分(有时很大)。