QWidget
- QWidget 类是所有用户界面对象的基类。它继承自QObject 和 QPaintDevice。
- 没有父类的 QWidget 叫做 Independent Window(独立窗口),可设置窗口标题,图标等;有父类的叫 Child Widgets(子部件),显示在父类中。
- QWidget可内嵌很多子部件,这些子部件需要通过Layout(布局)来加入到该QWidget中。布局管理将在之后讲解。
QMainWindow
- QMainWindow从QWidget类继承。
- QMainWindow是主窗体,有菜单栏、工具栏、状态栏,浮动窗体区,中心窗体区等。如果这个类需要作为主窗体,那么使用QMainWindow。
- QMainWindow必须设置中心窗体,通过 setCentralWidget 函数设置。中心窗体是QWidget 类的实例。
- QMainWindow 可使用 saveState() 存储布局的状态;稍后可使用 restoreState() 恢复。
下面是QMainWindow的一个例子
代码如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @author: wind @contact: 367059791@qq.com @time: 2021/12/30 13:46 @file: demo_mainwindow.py @desc: """ import sys from PySide2.QtWidgets import ( QApplication, QMainWindow, QWidget, QVBoxLayout, QLabel, QAction, QToolBar, QDockWidget ) from PySide2.QtCore import Qt class MainWnd(QMainWindow): def __init__(self): super(MainWnd, self).__init__() self.setWindowTitle("QMainWindow demo") self.resize(600, 400) # 中心窗体 self.center = QWidget(self) self.center.setStyleSheet("""border: 1px solid red;""") # 红边框方便看到中心窗体 # 中心窗体设置布局 self.layout_central = QVBoxLayout() self.center.setLayout(self.layout_central) self.label_central = QLabel("中间区域", self) self.label_central.setAlignment(Qt.AlignCenter) self.layout_central.addWidget(self.label_central) # 主窗体必须设置中心窗体 self.setCentralWidget(self.center) # 菜单栏 menu1 = self.menuBar().addMenu("文件") # 添加1个菜单 action_open = QAction("打开", self) # 菜单里添加1个操作 menu1.addAction(action_open) # 工具栏 toolbar = QToolBar("tools") action_shutdown = QAction("关机", self) toolbar.addAction(action_shutdown) self.addToolBar(Qt.TopToolBarArea, toolbar) # 顶部添加工具栏 # 状态栏 self.statusBar().showMessage("加载...", timeout=2000) # 显示2秒 # 浮动窗体区 self.demo_dock = QDockWidget("demo_dock", self) self.addDockWidget(Qt.BottomDockWidgetArea, self.demo_dock) # 底部浮动区域添加 demo_dock if __name__ == "__main__": app = QApplication(sys.argv) wnd = MainWnd() wnd.show() sys.exit(app.exec_())
- 添加菜单“文件”
- 顶部添加了工具栏,并增加“关机”
- 状态栏显示2秒,
- 底部添加了浮动窗体demo_dock
QMainWindow区域分布如下图