PyQt5:如何将 QDialog 置于 QMainWindow 的centralwidget 中

问题描述 投票:0回答:1

我有一个像这样的QMainWindow:

窗口顶部有标题栏(默认窗口行为),标题为程序图标以及最小化、最大化和关闭按钮。 后面是一个菜单栏,下面是一个工具栏。 然后是主要的centralwidget(它只有一个stackedwidget作为子widget)。 页面底部有状态栏。

当我使用 .exec() 方法打开一个新的 QDialog 时,我想要:

  1. QDialog 大小为 0.98*centralwidget_size
  2. QDialog 居中,因此 QDialog 的中心成为 centerwidget 的中心。
  3. 如果可能的话,使 2. 响应式(我的意思是 QDialog 的 rect() 在 QMainWindow rect() 更改时更改)。

我尝试了很多方法都没有成功。

            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 不正确。

python user-interface pyqt5
1个回答
0
投票

我不知道100%是如何工作的,但使用:

self.move(self.main_self.MainWindow.mapToGlobal(QtCore.QPoint(int(qdialog_new_x),int(qdialog_new_y))))

将位置设置为正确的坐标。

© www.soinside.com 2019 - 2024. All rights reserved.