PyQt5: 如何在QMainWindow的centralwidget中居中QDialog
在窗口的顶部,有一个标题栏(这是默认的Windows行为),里面有程序的标题、图标,以及最小化、最大化和关闭按钮。接下来是菜单栏,下面是工具栏。然后是主要的中央小部件(里面只有一个堆叠小部件作为子小部件)。在页面的底部还有一个状态栏。
当我使用.exec()方法打开一个新的QDialog时,我希望:
- QDialog的大小是中央小部件大小的0.98倍。
- QDialog要居中,也就是说QDialog的中心要和中央小部件的中心对齐。
- 如果可能的话,让第二点是响应式的(我的意思是当QMainWindow的大小变化时,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坐标不对。
1 个回答
-1
我不太确定这个是怎么运作的,但可以使用:
self.move(self.main_self.MainWindow.mapToGlobal(QtCore.QPoint(int(qdialog_new_x),int(qdialog_new_y))))
来把位置设置到正确的坐标。