PyQt5 中的 List View

文章目录

    • 1. 基础概念
    • 2. 创建 List View
      • 2.1 PyQt5 中一个简单的 List View 实例
      • 2.2 代码解释
      • 2.3 运行结果
    • 3. 数据模型
      • 3.1 标准模型
      • 3.2 自定义模型
    • 4. 自定义 List View
      • 4.1 使用样式表 (QSS)
      • 4.2 设置项委托 (Item Delegate)
    • 5.事件处理
    • 6. 与数据交互
      • 6.1 添加数据
      • 6.2 删除数据
      • 6.3 编辑数据
      • 6.4 完整示例
    • 7. 排序与过滤
    • 8. 总结

1. 基础概念

  • 用途
    • List View 是 PyQt5 中用于显示列表数据的重要组件之一。它可以在界面上以列表的形式展示多行数据,通常用于显示诸如文件列表、联系人列表、日程安排等等的数据。
  • 特性
    • List View 具有灵活的布局和显示方式,可以根据需要进行自定义。它支持多种交互方式,比如点击、双击、拖拽等。同时,List View 也支持排序、过滤、编辑等功能,使用户能够更方便地管理和操作列表中的数据。
  • 基本工作原理
    • List View 基于模型-视图架构工作。它通过与数据模型进行交互来显示数据,并且可以使用不同的模型来管理不同类型的数据。List View 通过视图部件以及布局来展示数据,并通过委托来控制每个数据项的显示方式。
  • 视图和模型
    • 在 PyQt5中,List View 是视图(View)部件,用于显示数据;而数据模型(Model)则负责管理数据的存储和操作。通常情况下,可以使用 PyQt5 提供的标准模型(如 QStandardItemModel)来管理数据,也可以自定义模型来满足特定需求。
  • 定制化
    • List View 可以通过设置不同的属性和样式来进行定制化,比如调整行高、列宽、文本颜色、背景色等。此外,还可以通过设置委托(Delegate)来实现更高级的定制化,比如自定义每个数据项的显示方式或交互方式。

2. 创建 List View

2.1 PyQt5 中一个简单的 List View 实例

​ 下面我们用PyQt5 创建一个简单的 List View 实例,并展示一些静态数据

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QListView
from PyQt5.QtCore import QStringListModelclass MyMainWindow(QMainWindow):def __init__(self):super().__init__()# 设置窗口标题和大小self.setWindowTitle("Simple List View Example")self.resize(500, 300)# 创建数据模型并填充数据data = ["Apple", "Banana", "Orange", "Grapes", "Pineapple"]self.model = QStringListModel()self.model.setStringList(data)# 创建 List View 实例并设置数据模型self.list_view = QListView()self.list_view.setModel(self.model)# 创建主窗口布局layout = QVBoxLayout()layout.addWidget(self.list_view)# 创建主窗口部件并设置布局central_widget = QWidget()central_widget.setLayout(layout)self.setCentralWidget(central_widget)if __name__ == "__main__":# 创建应用程序对象app = QApplication(sys.argv)# 创建主窗口对象window = MyMainWindow()# 显示主窗口window.show()# 进入应用程序的主事件循环sys.exit(app.exec_())

2.2 代码解释

  • from PyQt5.QtCore import QStringListModel: 导入 PyQt5 中的 QStringListModel 类,用于管理 List View 的数据模型。
  • self.setWindowTitle("Simple List View Example"): 设置主窗口的标题。
  • self.resize(500, 300): 设置主窗口的大小为宽度 500 像素、高度 300 像素。
  • data = ["Apple", "Banana", "Orange", "Grapes", "Pineapple"]: 定义一个包含静态数据的列表。
  • self.model = QStringListModel(): 创建一个 QStringListModel 对象,用于管理 List View 的数据模型。
  • self.model.setStringList(data): 将静态数据添加到数据模型中。
  • self.list_view = QListView(): 创建一个 QListView 对象,用于显示数据列表。
  • self.list_view.setModel(self.model): 将数据模型设置为 List View 的模型。
  • layout = QVBoxLayout(): 创建一个垂直布局管理器。
  • layout.addWidget(self.list_view): 将 List View 添加到布局中。
  • central_widget = QWidget(): 创建一个 QWidget 对象作为主窗口的中央部件。
  • central_widget.setLayout(layout): 将布局设置为中央部件的布局。
  • self.setCentralWidget(central_widget): 将中央部件设置为主窗口的中央部件。

2.3 运行结果

在这里插入图片描述

3. 数据模型

在 PyQt5 中,数据模型是一种用于管理 List View 中数据的重要概念。数据模型负责存储、组织和操作列表视图中显示的数据。PyQt5 提供了两种主要类型的数据模型:标准模型和自定义模型。

3.1 标准模型

  • PyQt5 提供了一些标准的数据模型类,最常用的是 QStandardItemModel 和 QStringListModel。

  • QStandardItemModel:适用于一般的数据展示,可以存储各种类型的数据,每个数据项都可以包含文本、图标等内容。

  • QStringListModel:专门用于管理字符串列表的数据模型,可以方便地将字符串列表显示在 List View 中。

    from PyQt5.QtCore import QStringListModel# 创建 QStringListModel 数据模型
    model = QStringListModel()# 填充数据到模型中
    data = ["Apple", "Banana", "Orange", "Grapes", "Pineapple"]
    model.setStringList(data)

3.2 自定义模型

  • 有时候,标准模型可能无法满足特定的需求,这时可以自定义数据模型。

  • 自定义模型需要继承自 QAbstractItemModel 类,并实现一些关键的方法,如 data()、rowCount()、columnCount() 等,以便 List View 能够正确地显示数据。

    from PyQt5.QtCore import QAbstractItemModel, QModelIndex, Qt# 自定义数据模型类
    class CustomModel(QAbstractItemModel):def __init__(self, data, parent=None):super().__init__(parent)self.data = datadef rowCount(self, parent=QModelIndex()):return len(self.data)def columnCount(self, parent=QModelIndex()):return 1def data(self, index, role=Qt.DisplayRole):if role == Qt.DisplayRole:return self.data[index.row()]return None# 使用自定义模型
    data = ["Apple", "Banana", "Orange", "Grapes", "Pineapple"]
    model = CustomModel(data)
    

4. 自定义 List View

在 PyQt5 中,自定义 List View 的外观和行为可以通过多种方式实现,包括使用样式表 (QSS)、设置项委托 (Item Delegate) 以及直接修改 List View 的属性。

4.1 使用样式表 (QSS)

样式表类似于 CSS,可以用于修改控件的外观。

from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QListView
from PyQt5.QtCore import QStringListModel
import sysclass MyMainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Custom List View Example")self.resize(500, 300)# 创建数据模型并填充数据data = ["Apple", "Banana", "Orange", "Grapes", "Pineapple"]self.model = QStringListModel()self.model.setStringList(data)# 创建 List View 实例并设置数据模型self.list_view = QListView()self.list_view.setModel(self.model)# 使用样式表自定义 List View 的外观self.list_view.setStyleSheet("""QListView {background-color: #f0f0f0;alternate-background-color: #e0e0e0;padding: 10px;}QListView::item {height: 40px;}QListView::item:selected {background-color: #a0a0ff;color: white;}""")# 创建主窗口布局layout = QVBoxLayout()layout.addWidget(self.list_view)# 创建主窗口部件并设置布局central_widget = QWidget()central_widget.setLayout(layout)self.setCentralWidget(central_widget)if __name__ == "__main__":app = QApplication(sys.argv)window = MyMainWindow()window.show()sys.exit(app.exec_())

结果如下:

在这里插入图片描述

4.2 设置项委托 (Item Delegate)

项委托可以自定义每个项的绘制和编辑行为。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QListView, QStyledItemDelegate, QStyle
from PyQt5.QtCore import QStringListModel, QRect, QSize, Qt
from PyQt5.QtGui import QPainter, QColor, QFontclass CustomDelegate(QStyledItemDelegate):def paint(self, painter, option, index):painter.save()# 获取当前项的矩形区域rect = option.rect# 检查项的选择状态并设置相应的背景颜色if option.state & QStyle.State_Selected:painter.fillRect(rect, QColor("#D3D3D3"))  # 灰色背景else:painter.fillRect(rect, QColor("#FFFFFF"))  # 白色背景# 获取要显示的文本text = index.data()# 设置自定义字体和颜色font = QFont("Arial", 14)painter.setFont(font)painter.setPen(QColor("#000000"))  # 黑色字体# 绘制文本painter.drawText(rect, Qt.AlignLeft | Qt.AlignVCenter, text)painter.restore()def sizeHint(self, option, index):# 自定义每个项的高度return QSize(option.rect.width(), 40)class MyMainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Custom List View Example")self.resize(500, 300)# 创建数据模型并填充数据data = ["Apple", "Banana", "Orange", "Grapes", "Pineapple"]self.model = QStringListModel()self.model.setStringList(data)# 创建 List View 实例并设置数据模型self.list_view = QListView()self.list_view.setModel(self.model)# 设置自定义委托self.list_view.setItemDelegate(CustomDelegate())# 创建主窗口布局layout = QVBoxLayout()layout.addWidget(self.list_view)# 创建主窗口部件并设置布局central_widget = QWidget()central_widget.setLayout(layout)self.setCentralWidget(central_widget)if __name__ == "__main__":app = QApplication(sys.argv)window = MyMainWindow()window.show()sys.exit(app.exec_())

运行结果如下:

在这里插入图片描述

5.事件处理

  • 下面例子处理 List View 中的点击事件。

    import sys
    from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QListView, QMessageBox
    from PyQt5.QtCore import QStringListModelclass MyMainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("List View Event Handling Example")self.resize(300, 200)# 创建数据模型并填充数据data = ["Apple", "Banana", "Orange", "Grapes", "Pineapple"]self.model = QStringListModel()self.model.setStringList(data)# 创建 List View 实例并设置数据模型self.list_view = QListView()self.list_view.setModel(self.model)# 连接 List View 的点击事件到相应的处理函数self.list_view.clicked.connect(self.on_item_clicked)# 创建主窗口布局layout = QVBoxLayout()layout.addWidget(self.list_view)# 创建主窗口部件并设置布局central_widget = QWidget()central_widget.setLayout(layout)self.setCentralWidget(central_widget)def on_item_clicked(self, index):# 获取点击项的文本item_text = index.data()# 显示消息框QMessageBox.information(self, "Item Clicked", f"You clicked: {item_text}")if __name__ == "__main__":app = QApplication(sys.argv)window = MyMainWindow()window.show()sys.exit(app.exec_())

    运行结果如下:

    在这里插入图片描述

6. 与数据交互

​ 当与 PyQt5 中的 QListView 进行交互时,可以通过操作数据模型来实现添加、删除和编辑数据等操作。

6.1 添加数据

​ 要向 List View 中添加数据,可以直接修改数据模型。例如,对于 QStringListModel,可以使用 insertRows 方法或 append 方法添加新项。

# 创建数据模型
model = QStringListModel()# 添加新项
new_item = "New Item"
model.insertRows(model.rowCount(), 1)
model.setData(model.index(model.rowCount() - 1), new_item)

6.2 删除数据

​ 删除数据与添加数据类似,也是通过操作数据模型来实现。对于 QStringListModel,可以使用 removeRows 方法删除指定位置的项。

# 删除选定项
selected_index = list_view.selectedIndexes()[0]
model.removeRows(selected_index.row(), 1)

6.3 编辑数据

​ 要编辑 List View 中的数据,需要捕获用户的编辑动作,并更新相应的数据模型。可以通过重载委托类的 setEditorDatasetModelData 方法来实现。

class CustomDelegate(QStyledItemDelegate):def setEditorData(self, editor, index):# 获取当前项的文本text = index.data()# 将文本设置到编辑器中editor.setText(text)def setModelData(self, editor, model, index):# 获取编辑器中的文本text = editor.text()# 更新数据模型model.setData(index, text)

6.4 完整示例

下面是一个完整的示例,演示如何使用 PyQt5 实现添加、删除和编辑 List View 中的数据

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QListView, QPushButton, QLineEdit, QMessageBox, QStyledItemDelegate
from PyQt5.QtCore import QStringListModel, Qtclass CustomDelegate(QStyledItemDelegate):def setEditorData(self, editor, index):# 获取当前项的文本text = index.data()# 将文本设置到编辑器中editor.setText(text)def setModelData(self, editor, model, index):# 获取编辑器中的文本text = editor.text()# 更新数据模型model.setData(index, text)class MyMainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("List View Interaction Example")self.resize(300, 200)# 创建数据模型并填充数据self.model = QStringListModel()self.model.setStringList(["Apple", "Banana", "Orange"])# 创建 List View 实例并设置数据模型self.list_view = QListView()self.list_view.setModel(self.model)self.list_view.setItemDelegate(CustomDelegate())# 创建按钮和文本框self.add_button = QPushButton("Add")self.remove_button = QPushButton("Remove")self.edit_text = QLineEdit()self.add_button.clicked.connect(self.add_item)self.remove_button.clicked.connect(self.remove_item)# 创建主窗口布局layout = QVBoxLayout()layout.addWidget(self.list_view)layout.addWidget(self.add_button)layout.addWidget(self.remove_button)layout.addWidget(self.edit_text)# 创建主窗口部件并设置布局central_widget = QWidget()central_widget.setLayout(layout)self.setCentralWidget(central_widget)def add_item(self):# 获取要添加的文本new_item = self.edit_text.text().strip()if new_item:# 添加新项到数据模型self.model.insertRows(self.model.rowCount(), 1)self.model.setData(self.model.index(self.model.rowCount() - 1), new_item)# 清空文本框self.edit_text.clear()else:QMessageBox.warning(self, "Warning", "Please enter a valid item.")def remove_item(self):# 获取选定项的索引selected_indexes = self.list_view.selectedIndexes()if selected_indexes:# 删除选定项self.model.removeRows(selected_indexes[0].row(), 1)else:QMessageBox.warning(self, "Warning", "Please select an item to remove.")if __name__ == "__main__":app = QApplication(sys.argv)window = MyMainWindow()window.show()sys.exit(app.exec_())

运行结果如下:

在这里插入图片描述

7. 排序与过滤

在 PyQt5 中,可以通过使用 QSortFilterProxyModel 类来实现 List View 的排序和过滤功能。这个类可以作为数据模型的中介,允许对模型中的数据进行排序和过滤,而不改变原始模型的数据。下面是如何在 List View 中实现排序和过滤功能的简要步骤:

步骤概览

  1. 创建原始数据模型:通常使用 QStringListModel 或自定义的模型类。
  2. 创建 QSortFilterProxyModel 对象,并将原始数据模型设置为其源模型。
  3. QSortFilterProxyModel 设置为 List View 的模型。
  4. 设置 QSortFilterProxyModel 的排序和过滤规则。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QListView, QLineEdit, QLabel, QSortFilterProxyModel
from PyQt5.QtCore import QStringListModelclass MyMainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("List View Sorting and Filtering Example")self.resize(300, 200)# 创建原始数据模型并填充数据self.original_model = QStringListModel()self.original_model.setStringList(["Apple", "Banana", "Orange", "Grapes", "Pineapple"])# 创建排序和过滤代理模型self.proxy_model = QSortFilterProxyModel()self.proxy_model.setSourceModel(self.original_model)# 创建 List View 实例并设置模型为代理模型self.list_view = QListView()self.list_view.setModel(self.proxy_model)# 创建文本框和标签用于输入和显示过滤文本self.filter_edit = QLineEdit()self.filter_edit.textChanged.connect(self.filter_items)self.filter_label = QLabel("Filter:")# 创建主窗口布局layout = QVBoxLayout()layout.addWidget(self.filter_label)layout.addWidget(self.filter_edit)layout.addWidget(self.list_view)# 创建主窗口部件并设置布局central_widget = QWidget()central_widget.setLayout(layout)self.setCentralWidget(central_widget)def filter_items(self):# 获取过滤文本filter_text = self.filter_edit.text()# 设置过滤正则表达式self.proxy_model.setFilterRegExp(filter_text)if __name__ == "__main__":app = QApplication(sys.argv)window = MyMainWindow()window.show()sys.exit(app.exec_())

运行结果如下:

在这里插入图片描述

8. 总结

在这篇文章中,我们涵盖了 PyQt5 中 QListView 的各种功能和用法,包括List View 的基本概念,展示了如何使用 PyQt5 创建一个简单的 List View 实例,介绍了如何使用数据模型来管理 List View 中的数据,包括标准模型(如 QStringListModel)和自定义模型,我们讨论了如何自定义 List View 的外观和行为,包括调整行高、列宽、背景色等。我们介绍了如何设置项委托,以自定义 List View 中项的编辑器和显示器。我们讨论了如何处理 List View 中的事件,例如点击,并为这些事件添加相应的处理函数。我们展示了如何在 List View 中实现添加、删除、编辑数据等操作,以及如何使用自定义委托类来编辑数据。最后,我们介绍了如何使用 QSortFilterProxyModel 类来实现 List View 的排序和过滤功能,使用户能够更轻松地查找和管理数据。

总的来说,通过这些内容,读者可以了解到如何有效地使用 PyQt5 中的 QListView 组件,并根据自己的需求进行定制和扩展。

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

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

相关文章

echers配置项:数据过多时,折叠数据缩放查看

当数据过多时,如上图所示的时间点,会自动折叠,此时鼠标缩放还不起作用,我们配置如下代码 let option {dataZoom: [{startValue: 05:00}, // 这个值需要跟 第一条 时间数据对应上{type: inside}], }配置后,就可以进行…

echers配置项:折线图,折现的颜色修改

如上图所示:红框内的折现颜色修改,并隐藏默认的点 series: [{data: [1, 230, 224, 218, 135, 147, 760,1500,1200,2500,2000],type: line,lineStyle: {color: #00DBFE // 折现颜色},symbol:none, // 不显示点smooth: true, // 折现角度:圆滑…

5W 3KVAC隔离 宽电压输入 AC/DC 电源模块——TP05AL系列

TP05AL系列产品是一款经济型开板式开关电源,输出功率为5W,具有可靠性高、小体积、性价比高等特点,广泛用于工控和电力仪器、仪表、智能家居等相关行业。

通过 Apple Vision Pro 释放创造力:深入研究空间计算

Apple 最新进军空间计算领域的 Apple Vision Pro,标志着重新定义我们与技术交互方式的重大飞跃。空间计算超越了传统界限,允许用户以无缝集成到物理世界的方式参与 2D 和 3D 内容。 我们可以关注两种类型的体验: 在空间中渲染 2D 内容。这涉及将现有设备窗口投影到空间领域…

通过C++和libcurl下载网易云音乐音频文件的5个简单步骤

概述 在网络编程中,使用C和libcurl库下载文件是一项常见的任务。网易云音乐作为中国领先的在线音乐服务平台之一,以其丰富的音乐资源、优质的音质和智能推荐系统而广受欢迎。由于其平台提供了大量的正版音乐资源,用户在下载音频文件时可能会…

开源发布:JAVA版低代码报文网关-通过简单配置快速对接银行渠道

大家好,我是隐墨星辰,自从《百图解码支付系统设计与实现》专栏中的文章《图解支付报文网关:一种低代码报文网关的设计思路与核心代码实现》发表以来,不少同学留言或私信问我如何实现,说是虽然看懂了思路,但…

pycharm 里面安装 codeium 插件的时候,不能够弹出登录界面

pycharm 里面安装 codeium 插件的时候,不能够弹出登录界面 pycharm 里面安装 codeium 插件的时候,不能够弹出登录界面--解决如下A pycharm 里面安装 codeium 插件的时候,不能够弹出登录界面–解决如下 #踩坑/pycharm/codeium插件无法登录 安…

制氧机负离子的作用与好处深度解析

随着现代生活节奏的加快,空气质量逐渐下降,人们对健康生活的追求也日益增强。在这样的背景下,制氧机负离子功能因其多重健康效益而备受关注。本文将深入探讨制氧机负离子的作用与功效,帮助大家更好地了解并应用这一健康科技。 我们…

单片机烧录程序时“DTR的低电平复位,RTS高电平进入bootloader”有关的串口Modem联络信号

烧录程序时常见DTR和RTS引脚 参考,参考视频 因为常常使用的都是串口下载程序,常用的芯片CH340系列,下图中标红的引脚是MODEM联络信号,其中常见的DTR和RTS就是常见的串口Modem网络输出信号,也就是通过烧录软件控制的接…

深入解析Wireshark1:从捕获到分析,一网打尽数据包之旅

目录 1 认识 Wireshark 1.1 选择网卡界面 1.2 捕获数据包界面 1.3 常用按钮功能介绍 1.4 数据包列表信息 1.5 数据包详细信息 2 数据包案例分析 Frame: 物理层的数据帧概况 Ethernet II: 数据链路层以太网帧头部信息 Internet Protocol Version 4 (IPv4): 互联网层IP…

Git系列:git restore 高效恢复代码的技巧与实践

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

AndroidStudio集成高德地图后出现黑屏并报错

报错内容为:No implementation found for void com.autonavi.base.ae.gmap.GLMapEngine.nativeMainThreadTrigger(int, long) (tried Java_com_autonavi_base_ae_gmap_GLMapEngine_nativeMainThreadTrigger and Java_com_autonavi_base_ae_gmap_GLMapEngine_nativeM…

爱吃香蕉的珂珂

题目链接 爱吃香蕉的珂珂 题目描述 注意点 piles.length < h < 10^9如果某堆香蕉少于k根&#xff0c;将吃掉这堆的所有香蕉&#xff0c;然后这一小时内不会再吃更多的香蕉返回可以在 h 小时内吃掉所有香蕉的最小速度 k&#xff08;k 为整数&#xff09; 解答思路 二…

数据分析实例——搭建电商的指标体系||对应功能开发需要接入的电商API接口说明

前言&#xff1a; 在日常工作中&#xff0c;数据分析中常常涉及搭建指标体系&#xff0c;搭建电商需要接入的电商API接口本文主要以电商为案例&#xff0c;来讲讲如何搭建指标体系。 指标体系的定义&#xff1a; 指标体系是由一系列指标组成的&#xff0c;这些指标是基于不同的…

React 第三十六章 Scheduler 任务调度

Scheduler 用于在 React 应用中进行任务调度。它可以帮助开发人员在处理复杂的任务和操作时更好地管理和优化性能。 关于 Scheduler 在React 如何渲染的可以参考 React 第三十四章 React 渲染流程 下面我们根据流程图先简单的了解 Scheduler 的调度过程 Scheduler 维护两个队…

C++入门系列-赋值运算符重载

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 赋值运算符重载 运算符重载 C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是具有特殊函数名的函数&#xff0c;也具有其返回值类型&#xff0c;函数名字以及参…

【GESP试卷】2024年03月Scratch三级试卷

2024年GESP03月认证Scratch三级试卷 分数&#xff1a;100 题数&#xff1a;27 一、单选题(共15题&#xff0c;每题2分&#xff0c;共30分) 010203040506070809101112131415CBACADDADCBCBAB 1、小杨的父母最近刚刚给他买了一块华为手表&#xff0c;他说手表上跑的是鸿蒙&…

24长三角A题思路+分析选题

需要资料的宝子们可以进企鹅获取 A题 问题1&#xff1a;西湖游船上掉落华为 mate 60 pro 手机 1. 手机掉落范围分析 物品特征&#xff1a;华为 mate 60 pro 手机的尺寸、重量、形状等特性。静水假设&#xff1a;西湖水面平静&#xff0c;不考虑水流影响。掉落位置&#xff…

安卓Fragment基础

目录 前言一、基础使用二、动态添加Fragment三、Fragment的生命周期四、Fragment之间进行通信五、Fragment兼容手机和平板示例 前言 Fragment基础使用笔记 一、基础使用 Activity布局和文件 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/andro…

OpenAI 发布 GPT-4o,再次巩固行业地位!

5 月 14 日凌晨 1 点&#xff08;太平洋时间上午 10 点&#xff09;&#xff0c;OpenAI 发布了其最新的 GPT-4o&#xff0c;再次巩固了其在人工智能领域的领导地位。这次发布不仅仅是一个产品的推出&#xff0c;更是向世界宣告 AI 技术已迈入一个全新的纪元。OpenAI 的 CEO 萨姆…