窗口顶部有标题栏(默认窗口行为),标题为程序图标以及最小化、最大化和关闭按钮。 后面是一个菜单栏,下面是一个工具栏。 然后是主要的centralwidget(它只有一个stackedwidget作为子widget)。 页面底部有状态栏。
当我使用 .exec() 方法打开一个新的 QDialog 时,我想要:
我尝试了很多方法都没有成功。
title_bar_height = QtWidgets.QApplication.style().pixelMetric(QtWidgets.QStyle.PM_TitleBarHeight)
central_widget_width = int(self.main_self.ui.centralwidget.frameSize().width())
central_widget_height = int(self.main_self.ui.centralwidget.frameSize().height())
self.setFixedSize(int(0.95*central_widget_width),int(1.0*(central_widget_height-title_bar_height)))
central_widget_top_x = int(self.main_self.ui.centralwidget.frameGeometry().x())
central_widget_top_y = int(self.main_self.ui.centralwidget.frameGeometry().y())
central_widget_width = int(self.main_self.ui.centralwidget.frameGeometry().width())
central_widget_height = int(self.main_self.ui.centralwidget.frameGeometry().height())
qdialog_width = self.frameGeometry().width()
qdialog_height = self.frameGeometry().height()
print(central_widget_top_y)#->75
qdialog_new_x = central_widget_top_x + (central_widget_width-qdialog_width)/2
qdialog_new_y = central_widget_top_y + (central_widget_height-qdialog_height)/2
self.move(int(qdialog_new_x),int(qdialog_new_y))
print(self.frameGeometry().y()) #->75
尺寸正确,但 x、y 不正确。
我不知道100%是如何工作的,但使用:
self.move(self.main_self.MainWindow.mapToGlobal(QtCore.QPoint(int(qdialog_new_x),int(qdialog_new_y))))
将位置设置为正确的坐标。