PyQt5超详细教程终篇

PyQt5超详细教程

前言

接:

[【Python篇】PyQt5 超详细教程——由入门到精通(序篇)](【Python篇】PyQt5 超详细教程——由入门到精通(序篇)-CSDN博客)

建议把代码复制到pycahrm等IDE上面看实际效果,方便理解嗷❤️


第9部分:菜单栏、工具栏与状态栏


9.1 什么是菜单栏、工具栏和状态栏

在 PyQt5 中,菜单栏(QMenuBar)、工具栏(QToolBar)和状态栏(QStatusBar)是 QMainWindow 提供的标准控件,用于帮助用户更好地与应用程序交互。它们是桌面应用程序的常见组成部分:

  • 菜单栏(Menu Bar):位于窗口顶部的横向栏,包含菜单选项,通常用于组织常见的功能,比如“文件”、“编辑”、“视图”等。
  • 工具栏(Tool Bar):包含图标按钮,可以快速访问常用功能。通常位于窗口的顶部或侧面。
  • 状态栏(Status Bar):位于窗口底部,显示当前状态信息或提示信息。

9.2 创建一个简单的菜单栏

QMainWindow 提供了内置的菜单栏 QMenuBar。你可以在菜单栏中添加 菜单(QMenu)菜单项(QAction)。菜单项是用户可以点击执行某个操作的选项。

示例 1:创建带有菜单栏的应用程序
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QMenu, QMessageBoxclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("菜单栏示例")# 创建菜单栏menu_bar = self.menuBar()# 在菜单栏中添加菜单file_menu = menu_bar.addMenu("文件")edit_menu = menu_bar.addMenu("编辑")help_menu = menu_bar.addMenu("帮助")# 创建菜单项open_action = QAction("打开", self)save_action = QAction("保存", self)exit_action = QAction("退出", self)# 将菜单项添加到“文件”菜单file_menu.addAction(open_action)file_menu.addAction(save_action)file_menu.addSeparator()  # 添加分隔符file_menu.addAction(exit_action)# 为菜单项绑定事件open_action.triggered.connect(self.open_file)save_action.triggered.connect(self.save_file)exit_action.triggered.connect(self.exit_app)def open_file(self):QMessageBox.information(self, "打开文件", "执行打开文件操作")def save_file(self):QMessageBox.information(self, "保存文件", "执行保存文件操作")def exit_app(self):self.close()# 创建应用程序对象
app = QApplication(sys.argv)
window = MainWindow()
window.show()# 进入应用程序事件循环
sys.exit(app.exec_())
代码详解:
  1. QMenuBar

    self.menuBar()QMainWindow 提供的内置方法,用于创建菜单栏。菜单栏通常位于窗口的顶部,包含多个菜单选项。menuBar() 方法返回一个 QMenuBar 对象,你可以在其中添加菜单。

  2. QMenu

    menu_bar.addMenu("文件") 创建了一个菜单对象 QMenu,并将其添加到菜单栏中。每个菜单可以包含多个菜单项。

  3. QAction

    QAction 是菜单项的具体对象。通过 QAction("打开", self) 创建了一个名为“打开”的菜单项。你可以为菜单项设置文本、图标,甚至快捷键。

  4. addAction()

    file_menu.addAction(open_action) 将菜单项(QAction)添加到菜单(QMenu)中。用户点击这些菜单项时,会触发相应的事件。

  5. triggered.connect()

    每个菜单项可以连接到特定的事件处理函数。通过 triggered.connect() 方法,将菜单项的点击事件绑定到自定义方法。例如,open_action.triggered.connect(self.open_file) 将“打开”菜单项绑定到 open_file() 方法,当用户点击“打开”时,会执行该方法。

  6. QMessageBox

    open_file()save_file() 方法中,我们使用 QMessageBox 弹出提示框,显示当前执行的操作。QMessageBox.information() 创建了一个信息对话框,告诉用户执行了打开或保存文件的操作。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


9.3 创建工具栏

工具栏是 PyQt5 中用于快速访问常用操作的组件,通常位于窗口的顶部或侧面。工具栏中的每个按钮通常都有图标和提示信息,用户可以点击这些按钮来执行特定操作。

示例 2:创建带有工具栏的应用程序
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QToolBar, QMessageBox
from PyQt5.QtGui import QIconclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("工具栏示例")# 创建工具栏tool_bar = QToolBar("工具栏", self)self.addToolBar(tool_bar)# 创建工具栏上的操作open_action = QAction(QIcon("open.png"), "打开", self)save_action = QAction(QIcon("save.png"), "保存", self)exit_action = QAction(QIcon("exit.png"), "退出", self)# 添加操作到工具栏tool_bar.addAction(open_action)tool_bar.addAction(save_action)tool_bar.addSeparator()  # 工具栏分隔符tool_bar.addAction(exit_action)# 连接操作到事件处理open_action.triggered.connect(self.open_file)save_action.triggered.connect(self.save_file)exit_action.triggered.connect(self.exit_app)def open_file(self):QMessageBox.information(self, "打开文件", "工具栏执行打开文件操作")def save_file(self):QMessageBox.information(self, "保存文件", "工具栏执行保存文件操作")def exit_app(self):self.close()# 创建应用程序对象
app = QApplication(sys.argv)
window = MainWindow()
window.show()# 进入应用程序事件循环
sys.exit(app.exec_())
代码详解:
  1. QToolBar

    QToolBar 是 PyQt5 中的工具栏控件。通过 self.addToolBar() 方法,将工具栏添加到主窗口。工具栏通常位于窗口的顶部或侧面,用户可以通过工具栏上的按钮快速访问常用功能。

  2. QAction 和工具栏按钮

    工具栏上的每个按钮由 QAction 创建,并可以设置图标和提示文本。通过 QAction(QIcon("open.png"), "打开", self) 创建一个带有图标和文本的操作,图标来自 open.png 文件。(这个开发者自己准备)

  3. addAction()

    使用 tool_bar.addAction() 将操作(QAction)添加到工具栏中。工具栏会根据操作自动生成带有图标的按钮。

  4. 工具栏分隔符

    tool_bar.addSeparator() 可以在工具栏中插入分隔符,用于将不同功能的按钮进行分组和隔离,增强用户界面的可读性。

  5. 事件绑定

    与菜单项类似,工具栏按钮也可以绑定事件。通过 triggered.connect() 将按钮的点击事件与自定义方法相连。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


9.4 创建状态栏

状态栏(Status Bar)通常位于窗口的底部,用于显示应用程序的状态信息、提示信息或临时消息。PyQt5 提供了 QStatusBar 类,允许你向状态栏添加文本或其他控件。

示例 3:创建带有状态栏的应用程序
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabelclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("状态栏示例")# 创建状态栏self.status_bar = self.statusBar()# 设置状态栏的默认消息self.status_bar.showMessage("准备就绪", 5000)  # 显示 5 秒# 你也可以在状态栏中添加控件label = QLabel("状态栏中的标签")self.status_bar.addPermanentWidget(label)def change_status_message(self):# 改变状态栏的消息self.status_bar.showMessage("状态已改变", 3000)  # 显示 3 秒# 创建应用程序对象
app = QApplication(sys.argv)
window = MainWindow()
window.show()# 进入应用程序事件循环
sys.exit(app.exec_())
代码详解:
  1. QStatusBar

    QStatusBar 是 PyQt5 中的状态栏控件,通常位于窗口

的底部。通过 self.statusBar() 方法,可以获取并操作状态栏。

  1. showMessage()

    showMessage() 方法用于在状态栏中显示一条临时消息。这个消息会在指定的时间后自动消失,例如 showMessage("准备就绪", 5000) 会在状态栏中显示“准备就绪”,并在 5 秒后消失。

  2. addPermanentWidget()

    addPermanentWidget() 允许你在状态栏中添加永久控件,例如标签或进度条。永久控件会一直显示在状态栏中,直到你显式地移除它们。

    这里超过五秒“准备就绪”就会消失

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


9.5 菜单栏、工具栏与状态栏的结合

在实际应用中,菜单栏、工具栏和状态栏通常一起使用,形成应用程序的核心界面。菜单栏提供系统功能的组织,工具栏提供快速操作,状态栏则用于显示当前状态或提示信息。

示例 4:完整的应用程序界面
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QToolBar, QLabel, QStatusBar, QMessageBox
from PyQt5.QtGui import QIconclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("完整界面示例")# 创建菜单栏menu_bar = self.menuBar()file_menu = menu_bar.addMenu("文件")# 创建工具栏tool_bar = QToolBar("工具栏", self)self.addToolBar(tool_bar)# 创建状态栏self.status_bar = self.statusBar()self.status_bar.showMessage("欢迎使用", 5000)  # 显示 5 秒# 创建菜单项open_action = QAction(QIcon("open.png"), "打开", self)save_action = QAction(QIcon("save.png"), "保存", self)exit_action = QAction(QIcon("exit.png"), "退出", self)# 将菜单项添加到“文件”菜单file_menu.addAction(open_action)file_menu.addAction(save_action)file_menu.addAction(exit_action)# 将操作添加到工具栏tool_bar.addAction(open_action)tool_bar.addAction(save_action)tool_bar.addSeparator()tool_bar.addAction(exit_action)# 事件绑定open_action.triggered.connect(self.open_file)save_action.triggered.connect(self.save_file)exit_action.triggered.connect(self.exit_app)# 状态栏中的永久控件status_label = QLabel("状态栏中的标签")self.status_bar.addPermanentWidget(status_label)def open_file(self):self.status_bar.showMessage("打开文件", 3000)  # 显示 3 秒QMessageBox.information(self, "打开文件", "执行打开文件操作")def save_file(self):self.status_bar.showMessage("保存文件", 3000)QMessageBox.information(self, "保存文件", "执行保存文件操作")def exit_app(self):self.close()# 创建应用程序对象
app = QApplication(sys.argv)
window = MainWindow()
window.show()# 进入应用程序事件循环
sys.exit(app.exec_())
代码详解:
  1. 菜单栏、工具栏和状态栏的组合

    我们通过 QMenuBar 创建菜单栏,通过 QToolBar 创建工具栏,并通过 QStatusBar 创建状态栏。在主窗口中,我们同时使用了这三个核心界面元素,构建了一个完整的应用程序界面。

  2. showMessage() 与 addPermanentWidget()

    在状态栏中,showMessage() 方法用于显示临时状态消息,addPermanentWidget() 则用于添加永久控件,如标签。

  3. 事件处理

    菜单项和工具栏按钮都连接到了相同的事件处理函数,这使得无论用户从菜单栏还是工具栏发起操作,都会触发相同的逻辑。

这里工具栏如果有相应图标文件就会显示哦

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


9.6 总结

在这一部分中,我们详细介绍了 PyQt5 中的菜单栏、工具栏和状态栏,它们是应用程序界面的核心组成部分。通过这三大控件,你可以构建功能齐全的桌面应用程序,并为用户提供友好的操作界面。

关键点

  • 菜单栏(QMenuBar)用于组织应用程序的功能,通过菜单和菜单项实现。
  • 工具栏(QToolBar)用于提供快速操作的按钮,可以与菜单栏中的功能保持一致。
  • 状态栏(QStatusBar)用于显示当前状态信息或提示信息,还可以添加永久控件。

第10部分:布局管理器与窗口布局策略


10.1 什么是布局管理器

布局管理器 是 PyQt5 中用于自动调整和管理控件(Widget)在窗口中的排列方式的工具。通过布局管理器,控件可以根据窗口大小的变化自动调整其大小和位置,而无需手动进行坐标设置。PyQt5 提供了多种布局管理器,可以用来实现灵活的布局设计:

  • QVBoxLayout:垂直布局,将控件从上到下垂直排列。
  • QHBoxLayout:水平布局,将控件从左到右水平排列。
  • QGridLayout:网格布局,允许控件按行列排列,适合更复杂的界面。
  • QFormLayout:表单布局,通常用于表单界面,将标签和控件成对排列。

布局管理器通过动态调整控件的位置和大小,确保用户界面在不同窗口大小下保持美观且易于使用。


10.2 QVBoxLayout:垂直布局

QVBoxLayout 是 PyQt5 中的垂直布局管理器,它将控件从上到下垂直排列。控件会根据窗口的大小自动调整。

示例 1:使用 QVBoxLayout 创建垂直布局
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QVBoxLayoutclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QVBoxLayout 示例")# 创建一个 QWidget 容器container = QWidget()# 创建垂直布局管理器layout = QVBoxLayout()# 创建一些按钮button1 = QPushButton("按钮 1")button2 = QPushButton("按钮 2")button3 = QPushButton("按钮 3")# 将按钮添加到垂直布局中layout.addWidget(button1)layout.addWidget(button2)layout.addWidget(button3)# 将布局设置为 QWidget 的布局container.setLayout(layout)# 将容器设置为窗口的中央控件self.setCentralWidget(container)# 创建应用程序对象
app = QApplication(sys.argv)
window = MainWindow()
window.show()# 进入应用程序的事件循环
sys.exit(app.exec_())
代码详解:
  1. QVBoxLayout

    QVBoxLayout 是一个垂直布局管理器,控件在窗口中垂直排列。这里我们使用 layout.addWidget() 方法将三个按钮按照从上到下的顺序添加到垂直布局中。

  2. QWidget 容器

    PyQt5 中的布局管理器必须被设置在某个控件(如 QWidget)上。我们通过创建一个 QWidget 容器,将布局设置为该容器的布局,最后再将容器设置为窗口的中央控件。

  3. 窗口大小调整

    通过使用布局管理器,当用户调整窗口大小时,布局内的控件会自动调整其大小和位置。窗口越大,控件之间的空隙越大;窗口变小时,控件会自动紧凑排列。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


10.3 QHBoxLayout:水平布局

QHBoxLayout 是 PyQt5 中的水平布局管理器,控件会从左到右水平排列。与垂直布局类似,控件的位置和大小会根据窗口的宽度自动调整。

示例 2:使用 QHBoxLayout 创建水平布局
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QHBoxLayoutclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QHBoxLayout 示例")# 创建 QWidget 容器container = QWidget()# 创建水平布局管理器layout = QHBoxLayout()# 创建一些按钮button1 = QPushButton("按钮 1")button2 = QPushButton("按钮 2")button3 = QPushButton("按钮 3")# 将按钮添加到水平布局中layout.addWidget(button1)layout.addWidget(button2)layout.addWidget(button3)# 将布局设置为 QWidget 的布局container.setLayout(layout)# 将容器设置为窗口的中央控件self.setCentralWidget(container)# 创建应用程序对象
app = QApplication(sys.argv)
window = MainWindow()
window.show()# 进入应用程序的事件循环
sys.exit(app.exec_())
代码详解:
  1. QHBoxLayout

    QHBoxLayout 是水平布局管理器,控件从左到右水平排列。我们使用 layout.addWidget() 方法将按钮添加到水平布局中,按钮会依次从左到右排列。

  2. 调整控件位置

    当窗口宽度发生变化时,控件之间的距离会根据窗口大小进行动态调整,确保每个控件在窗口中的位置合理。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


10.4 QGridLayout:网格布局

QGridLayout 是 PyQt5 中的一种网格布局管理器,允许我们将控件按行列排列,类似于 Excel 表格。通过网格布局,你可以轻松地创建复杂的界面布局,指定控件占据的行和列。

示例 3:使用 QGridLayout 创建网格布局
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QGridLayoutclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QGridLayout 示例")# 创建 QWidget 容器container = QWidget()# 创建网格布局管理器layout = QGridLayout()# 创建一些按钮button1 = QPushButton("按钮 1")button2 = QPushButton("按钮 2")button3 = QPushButton("按钮 3")button4 = QPushButton("按钮 4")# 将按钮添加到网格布局中(指定行列位置)layout.addWidget(button1, 0, 0)  # 第 0 行第 0 列layout.addWidget(button2, 0, 1)  # 第 0 行第 1 列layout.addWidget(button3, 1, 0)  # 第 1 行第 0 列layout.addWidget(button4, 1, 1)  # 第 1 行第 1 列# 将布局设置为 QWidget 的布局container.setLayout(layout)# 将容器设置为窗口的中央控件self.setCentralWidget(container)# 创建应用程序对象
app = QApplication(sys.argv)
window = MainWindow()
window.show()# 进入应用程序的事件循环
sys.exit(app.exec_())
代码详解:
  1. QGridLayout

    QGridLayout 是一个网格布局管理器,它允许我们将控件按行列进行排列。每个控件的位置由其在网格中的行列位置决定。通过 layout.addWidget(widget, row, column),我们可以将控件放置在特定的行和列中。

  2. 复杂布局

    网格布局非常适合复杂的界面设计,例如需要多个控件并排排列或分组排列的情况。通过指定控件的行列位置,你可以实现更精细的布局控制。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


10.5 QFormLayout:表单布局

QFormLayout 是 PyQt5 中的表单布局管理器,它将控件以标签-控件对的形式排列,常用于创建输入表单。每一行包含一个标签和一个对应的输入控件,如文本框、下拉框等。

示例 4:使用 QFormLayout 创建表单布局
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QLabel, QLineEdit, QFormLayoutclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QFormLayout 示例")# 创建 QWidget 容器container = QWidget()# 创建表单布局管理器layout = QFormLayout()# 创建标签和文本输入框label_name = QLabel("姓名:")input_name = QLineEdit()label_age = QLabel("年龄:")input_age = QLineEdit()label_email = QLabel("邮箱:")input_email = QLineEdit()# 将标签和文本框成对添加到表单布局中layout.addRow(label_name, input_name)layout.addRow(label_age, input_age)layout.addRow(label_email, input_email)# 将布局设置为 QWidget 的布局container.setLayout(layout)# 将容器设置self.setCentralWidget(container)# 创建应用程序对象
app = QApplication(sys.argv)
window = MainWindow()
window.show()# 进入应用程序的事件循环
sys.exit(app.exec_())
代码详解:
  1. QFormLayout

    QFormLayout 是表单布局管理器,通常用于创建输入表单。每一行包含一个标签控件和一个输入控件,类似于网页中的表单布局。通过 layout.addRow() 方法将控件成对添加到表单中。

  2. 标签与输入框的组合

    每行布局包含一个标签和对应的输入框,例如姓名输入框、年龄输入框等。这种布局非常适合用于收集用户输入的信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


10.6 布局嵌套

在实际应用中,单一布局管理器可能无法满足所有布局需求。PyQt5 支持 布局嵌套,你可以将不同的布局管理器组合在一起,创建更复杂的界面。

示例 5:布局嵌套
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QVBoxLayout, QHBoxLayoutclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("布局嵌套示例")# 创建主容器container = QWidget()# 创建主垂直布局main_layout = QVBoxLayout()# 创建一个子水平布局top_layout = QHBoxLayout()button1 = QPushButton("顶部按钮 1")button2 = QPushButton("顶部按钮 2")top_layout.addWidget(button1)top_layout.addWidget(button2)# 创建另一个子水平布局bottom_layout = QHBoxLayout()button3 = QPushButton("底部按钮 1")button4 = QPushButton("底部按钮 2")bottom_layout.addWidget(button3)bottom_layout.addWidget(button4)# 将子布局添加到主布局中main_layout.addLayout(top_layout)main_layout.addLayout(bottom_layout)# 将主布局设置为 QWidget 的布局container.setLayout(main_layout)# 将容器设置为窗口的中央控件self.setCentralWidget(container)# 创建应用程序对象
app = QApplication(sys.argv)
window = MainWindow()
window.show()# 进入应用程序的事件循环
sys.exit(app.exec_())
代码详解:
  1. 布局嵌套

    布局嵌套意味着在一个布局管理器中嵌套另一个布局管理器。这里我们创建了一个垂直布局,并在其中嵌套了两个水平布局。每个水平布局包含两个按钮,整个界面形成了上下分区的布局结构。

  2. 复杂界面设计

    通过布局嵌套,你可以轻松实现复杂的界面设计,将不同的控件组织成更加直观、合理的布局结构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


10.7 响应式布局与控件大小策略

在创建应用程序界面时,保证界面在不同窗口大小下都能正常显示非常重要。PyQt5 提供了控件的 大小策略(Size Policy),帮助你控制控件在窗口大小变化时的行为。

  • Fixed:控件保持固定大小,不会随着窗口调整而改变。
  • Expanding:控件会随着窗口大小变化自动扩展,填充可用的空间。
  • Minimum:控件保持最小大小,但可以在需要时扩展。
示例 6:设置控件的大小策略
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QVBoxLayoutclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("控件大小策略示例")# 创建主容器container = QWidget()# 创建垂直布局管理器layout = QVBoxLayout()# 创建按钮button1 = QPushButton("固定大小按钮")button2 = QPushButton("可扩展按钮")# 设置按钮的大小策略button1.setSizePolicy(QPushButton.Fixed, QPushButton.Fixed)  # 固定大小button2.setSizePolicy(QPushButton.Expanding, QPushButton.Expanding)  # 自动扩展# 将按钮添加到布局中layout.addWidget(button1)layout.addWidget(button2)# 将布局设置为 QWidget 的布局container.setLayout(layout)# 将容器设置为窗口的中央控件self.setCentralWidget(container)# 创建应用程序对象
app = QApplication(sys.argv)
window = MainWindow()
window.show()# 进入应用程序的事件循环
sys.exit(app.exec_())
代码详解:
  1. 控件大小策略

    通过 setSizePolicy() 方法,你可以为控件设置不同的大小策略。例如,button1.setSizePolicy(QPushButton.Fixed, QPushButton.Fixed) 将按钮的大小固定,而 button2.setSizePolicy(QPushButton.Expanding, QPushButton.Expanding) 允许按钮根据窗口大小自动扩展。

  2. 自适应界面

    控件大小策略使得界面能够根据窗口大小进行自动调整,保证在不同尺寸的窗口下都能保持良好的布局。


10.8 总结

在这一部分中,我们详细介绍了 PyQt5 中的布局管理器及其使用策略。通过布局管理器,你可以轻松创建灵活、美观的用户界面,并确保界面在不同窗口大小下保持良好的响应性。我们还讨论了控件的大小策略,帮助你进一步控制界面在不同窗口尺寸下的表现。

关键点

  • QVBoxLayout 和 QHBoxLayout 是垂直和水平布局,适合简单的控件排列。
  • QGridLayout 允许控件按行列排列,适合复杂布局。
  • QFormLayout 非常适合用于创建输入表单。
  • 布局嵌套能够帮助你设计更加复杂的界面。
  • 控件的大小策略确保界面在不同窗口大小下能自适应变化。

第9-10部分总结:菜单栏、工具栏与布局管理

在第9至第10部分中,我们深入讲解了 PyQt5 中的菜单栏、工具栏和状态栏的使用,展示了如何为应用程序添加组织良好的功能结构和界面元素。同时,我们详细介绍了布局管理器的使用,包括 QVBoxLayout、QHBoxLayout、QGridLayout、QFormLayout 等,帮助构建灵活且响应式的用户界面。通过控件的大小策略和布局嵌套,你可以确保界面在不同窗口大小下保持美观和功能性。
ePolicy(QPushButton.Fixed, QPushButton.Fixed)将按钮的大小固定,而button2.setSizePolicy(QPushButton.Expanding, QPushButton.Expanding)` 允许按钮根据窗口大小自动扩展。

  1. 自适应界面

    控件大小策略使得界面能够根据窗口大小进行自动调整,保证在不同尺寸的窗口下都能保持良好的布局。


10.8 总结

在这一部分中,我们详细介绍了 PyQt5 中的布局管理器及其使用策略。通过布局管理器,你可以轻松创建灵活、美观的用户界面,并确保界面在不同窗口大小下保持良好的响应性。我们还讨论了控件的大小策略,帮助你进一步控制界面在不同窗口尺寸下的表现。

关键点

  • QVBoxLayout 和 QHBoxLayout 是垂直和水平布局,适合简单的控件排列。
  • QGridLayout 允许控件按行列排列,适合复杂布局。
  • QFormLayout 非常适合用于创建输入表单。
  • 布局嵌套能够帮助你设计更加复杂的界面。
  • 控件的大小策略确保界面在不同窗口大小下能自适应变化。

第9-10部分总结:菜单栏、工具栏与布局管理

在第9至第10部分中,我们深入讲解了 PyQt5 中的菜单栏、工具栏和状态栏的使用,展示了如何为应用程序添加组织良好的功能结构和界面元素。同时,我们详细介绍了布局管理器的使用,包括 QVBoxLayout、QHBoxLayout、QGridLayout、QFormLayout 等,帮助构建灵活且响应式的用户界面。通过控件的大小策略和布局嵌套,你可以确保界面在不同窗口大小下保持美观和功能性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/60135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSX 语法与基础组件使用

在 React Native 中,JSX 是一种 JavaScript 的语法扩展,用于描述 UI 界面。JSX 语法类似于 HTML,但它是 JavaScript 的语法糖,可以直接在 JavaScript 代码中编写 UI 组件。本章节将介绍 JSX 语法的基础知识,以及 React…

会议直击|美格智能受邀出席第三届无锡智能网联汽车生态大会,共筑汽车产业新质生产力

11月10日,2024世界物联网博览会分论坛——第三届无锡智能网联汽车生态大会在无锡举行,美格智能CEO杜国彬受邀出席,并参与“中央域控:重塑汽车智能架构的未来”主题圆桌论坛讨论,与行业伙伴共同探讨智能网联汽车产业领域…

昇思大模型平台打卡体验活动:项目1基于MindSpore实现BERT对话情绪识别

基于MindSpore实现BERT对话情绪识别 1. 模型简介 BERT(Bidirectional Encoder Representations from Transformers)是由Google于2018年末开发并发布的一种新型语言模型,基于Transformer架构中的Encoder,并且具有双向编码的特性。…

vue+Springboot实现简单文件上传到本地

实现效果 点击上传文件按钮后&#xff0c;选择需要上传的文件&#xff0c;如果是图片的话&#xff0c;上传成功后可以直接在下面预览。 前端页面 <template><div class"file-upload"><el-upload:headers"getUploadConfig(token).headers"…

解决 Vue3、Vite 和 TypeScript 开发环境下跨域的问题,实现前后端数据传递

引言 本文介绍如何在开发环境下解决 Vite 前端&#xff08;端口 3000&#xff09;和后端&#xff08;端口 80&#xff09;之间的跨域问题&#xff1a; 在开发环境中&#xff0c;前端使用的 Vite 端口与后端端口不一致&#xff0c;会产生跨域错误提示&#xff1a; Access to X…

Java项目实战II基于微信小程序的订餐系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导 一、前言 随着移动互联网技术的飞速发展&#xff0…

闯关leetcode——202. Happy Number

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/happy-number/description/ 内容 Write an algorithm to determine if a number n is happy. A happy number is a number defined by the following process: Starting with any positive inte…

昇思大模型平台打卡体验活动:项目4基于MindSpore实现Roberta模型Prompt Tuning

基于MindNLP的Roberta模型Prompt Tuning 本文档介绍了如何基于MindNLP进行Roberta模型的Prompt Tuning&#xff0c;主要用于GLUE基准数据集的微调。本文提供了完整的代码示例以及详细的步骤说明&#xff0c;便于理解和复现实验。 环境配置 在运行此代码前&#xff0c;请确保…

中国药品注册审批数据库- 药品注册信息查询与审评进度查询方法

药品的注册、审评审批进度信息是医药研发相关人员每天都会关注的信息&#xff0c;为了保证药品注册申请受理及审评审批进度信息的公开透明&#xff0c;CDE药审中心提供药品不同注册分类序列及药品注册申请受理的审评审批进度信息查询服务。但因CDE官网的改版导致很大一部分人不…

FMC 扩展子卡6 路 422,8 组 LVDS,8 路 GPIO

FMC 扩展子卡6 路 422,8 组 LVDS,8 路 GPIO 卡是一款支持多路 LVCMOS 和 LVDS 信号互转的 FMC 扩展子板。它能支持 6 路 422 信号的输入 / 输出 ,8 组 LVDS 信号的输入 / 输出和 8 路 GPIO 信号的输入 / 输出。本产品基于一些逻辑转换芯片而设计&#xff0c;能实现差分信号转单…

C++builder中的人工智能(21):Barabási–Albert model(BA)模型

在此之前&#xff0c;大多数网络被想当然的认为是随机的&#xff0c;因此连接度分布可以近似用泊松分布来表示&#xff0c;而巴拉巴西与其学生阿尔伯特、郑浩雄通过对万维网度分布测量的结果却显示万维网度分布服从幂律分布&#xff0c;存在枢纽节点&#xff08;拥有大量链接的…

MyBatis3-获取参数值的方式、查询功能及特殊SQL执行

目录 准备工作 获取参数值的方式&#xff08;重点&#xff09; 查询功能 查询一个实体类对象 查询一个list集合 查询单个数据 查询一条数据为map集合 查询多条数据为map集合 特殊SQL执行 模糊查询 批量删除 动态设置表名 添加功能获取自增的主键 准备工作 模块My…

链表(Linkedlist)

序言 我们都了解链表是一种数据的存储结构&#xff0c;在Java使用中逻辑与c&#xff0c;c语言数据结构别无二致&#xff0c;但主要由于Java中不存在指针的说法&#xff0c;从而导致在实现过程中的代码不同&#xff0c;所以在学习的过程中我们无需过于担心&#xff0c;逻辑都是…

【分布式事务】二、NET8分布式事务实践: DotNetCore.CAP 框架 、 消息队列(RabbitMQ)、 多类型数据库(MySql、MongoDB)

介绍 DotNetCore.CAP简称CAP, [CAP]是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案, 同样可以用来作为 EventBus 使用,CAP 拥有自己的特色,它不要求使用者发送消息或者处理消息的时候实现或者继承任何接口,拥有非常高的灵活性。我们一直坚信…

利用pythonstudio写的PDF、图片批量水印生成器,可同时为不同读者生成多组水印

现在很多场合需要将PDF或图片加水印&#xff0c;本程序利用pythonstudio编写。 第一步 界面 其中&#xff1a; LstMask:列表框 PopupMenu:PmnMark LstFiles:列表框 PopupMenu:PmnFiles OdFiles:文件选择器 Filter:PDF文件(.PDF)|.PDF|图像文件(.JPG)|.JPG|图像文件(.png…

面试:TCP、UDP如何解决丢包问题

文章目录 一、TCP丢包原因、解决办法1.1 TCP为什么会丢包1.2 TCP传输协议如何解决丢包问题1.3 其他丢包情况&#xff08;拓展&#xff09;1.4 补充1.4.1 TCP端口号1.4.2 多个TCP请求的逻辑1.4.3 处理大量TCP连接请求的方法1.4.4 总结 二、UDP丢包2.1 UDP协议2.1.1 UDP简介2.1.2…

Python的函数(补充浅拷贝和深拷贝)

一、定义 函数的定义&#xff1a;实现【特定功能】的代码块。 形参&#xff1a;函数定义时的参数&#xff0c;没有实际意义 实参&#xff1a;函数调用/使用时的参数&#xff0c;有实际意义 函数的作用&#xff1a; 简化代码提高代码重用性便于维护和修改提高代码的可扩展性…

Spring Boot框架的知识分类技术解析

2 开发技术 2.1 VUE框架 Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09; 是一套构建用户界面的渐进式框架。 Vue 只关注视图层&#xff0c; 采用自底向上增量开发的设计。 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 2.2 Mysql数据库 …

Hive详解

1 Hive基本概念 Hive是一个构建在Hadoop上的数据仓库框架。最初&#xff0c;Hive是由Facebook开发&#xff0c;后来移交由Apache软件基金会开发&#xff0c;并作为一个Apache开源项目。 Hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张数据…

llamaIndex和langchain对比及优劣对比

一. LangChain vs LlamaIndex: 基本描述 LlamaIndex在搜索和检索任务方面表现出色。它是一个强大的数据索引和查询工具&#xff0c;非常适合需要高级搜索的项目。LlamaIndex能够处理大型数据集&#xff0c;从而实现快速准确的信息检索。 LangChain是一个模块化和灵活的工具集框…