https://doc.qt.io/qtforpython/PySide2/QtWidgets/QMainWindow.html?highlight=qmainwindow#PySide2.QtWidgets.QMainWindow
Qt主窗口框架
主窗口提供了用于构建应用程序用户界面的框架。 Qt具有用于主窗口管理的QMainWindow及其相关类。 QMainWindow有其自己的布局,您可以在其中添加QToolBar,QDockWidget,QMenuBar和QStatusBar。 布局具有可被任何类型的小部件占据的中心区域。 您可以在下面看到布局的图像。
注意:
不支持创建没有中央窗口小部件的主窗口。 您必须有一个中央小部件,即使它只是一个占位符。
创建主窗口组件
中央小部件通常是标准的Qt小部件,例如QTextEdit或QGraphicsView。 自定义窗口小部件也可以用于高级应用程序。 您可以使用setCentralWidget()设置中央窗口小部件。
主窗口具有单个(SDI)或多个(MDI)文档界面。 通过使用QMdiArea作为中央窗口小部件,可以在Qt中创建MDI应用程序。
现在,我们将检查可以添加到主窗口中的每个其他小部件。 我们提供有关如何创建和添加它们的示例。
创建菜单
Qt在QMenu中实现菜单,而QMainWindow将其保留在QMenuBar中。 QAction被添加到菜单,将其显示为菜单项。
您可以通过调用menuBar()将新菜单添加到主窗口的菜单栏中,该菜单返回窗口的QMenuBar,然后使用addMenu()添加菜单。
QMainWindow带有一个默认的菜单栏,但是您也可以使用setMenuBar()自己设置一个菜单栏。 如果您希望实现自定义菜单栏(即不使用QMenuBar小部件),则可以使用setMenuWidget()进行设置。
下面是如何创建菜单的示例:(不是python代码?)
void MainWindow::createMenus()
{
fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAct);
fileMenu->addAction(openAct);
fileMenu->addAction(saveAct);
当主窗口接收到上下文菜单事件时,createPopupMenu()函数将创建弹出菜单。 默认实现会生成一个菜单,其中包含来自停靠小部件和工具栏的可检查操作。 您可以为自定义菜单重新实现createPopupMenu()。
创建工具栏
工具栏在QToolBar类中实现。 使用addToolBar()将工具栏添加到主窗口。
您可以通过将工具栏分配给特定的ToolBarArea来控制它们的初始位置。 您可以通过插入工具栏分隔符来分割区域-将其视为文本编辑中的换行符-使用addToolBarBreak()或insertToolBarBreak()即可。 您还可以使用setAllowedAreas()和setMovable()限制用户的放置。
工具栏图标的大小可以使用iconSize()获取。 大小取决于平台; 您可以使用setIconSize()设置固定大小。 您可以使用setToolButtonStyle()更改工具栏中所有工具按钮的外观。
工具栏创建的示例如下:
void MainWindow::createToolBars()
{
fileToolBar = addToolBar(tr("File"));
fileToolBar->addAction(newAct);
创建Dock小部件
Dock小部件在QDockWidget类中实现。 停靠小部件是可以停靠在主窗口中的窗口。 您可以使用addDockWidget()将停靠小部件添加到主窗口。
DockWidgetArea枚举提供了四个停靠小部件区域:左,右,顶部和底部。 您可以使用setCorner()指定哪个停靠窗口小部件区域应占据该区域重叠的角。 默认情况下,每个区域只能包含一行(垂直或水平)停靠小部件,但是如果使用setDockNestingEnabled()启用嵌套,则可以在任一方向添加停靠小部件。
两个底座窗口小部件也可以彼此堆叠。 然后,使用QTabBar选择应显示的窗口小部件。
我们提供一个示例,说明如何创建停靠窗口小部件并将其添加到主窗口:
dockWidget = QDockWidget(tr("Dock Widget"), self)
dockWidget.setAllowedAreas(Qt.LeftDockWidgetArea |
Qt.RightDockWidgetArea)
dockWidget.setWidget(dockWidgetContents)
addDockWidget(Qt.LeftDockWidgetArea, dockWidget)
状态栏
您可以使用setStatusBar()设置状态栏,但是第一次调用statusBar()(会返回主窗口的状态栏)时会创建一个状态栏。 有关如何使用它的信息,请参见QStatusBar。
存储状态
QMainWindow可以使用saveState()存储其布局状态; 以后可以使用restoreState()检索它。 它是所存储的工具栏和停靠小部件的位置和大小(相对于主窗口的大小)。
See also
QMenuBarQToolBarQStatusBarQDockWidgetApplication ExampleDock Widgets ExampleMDI Example SDI Example Menus Example
class QMainWindow([parent=None[, flags=Qt.WindowFlags()]])¶
param parent
QWidget
param flags
WindowFlags
构造一个具有给定父对象和指定窗口小部件标志的QMainWindow。
QMainWindow设置Window标志本身,因此将始终被创建为顶级窗口小部件。
参考文章:python PyQt5中文教程☞【第五节】PyQt5事件(Event)和信号(信号槽 Signals & slots)
PySide2.QtWidgets.QMainWindow.statusBar()¶
Return type
QStatusBar
返回主窗口的状态栏。 如果状态栏不存在,则此函数创建并返回一个空的状态栏。
See also
setStatusBar()