快速掌握Pyqt5的三种主窗口
快速掌握Pyqt5的2种弹簧
快速掌握Pyqt5的5种布局
快速弄懂Pyqt5的5种项目视图(Item View)
快速掌握Pyqt5的6种按钮
待续。。。

在PyQt5中,item widget是指可以放置在某些特定控件中的小部件,这些控件如QListWidgetQTableWidgetQTreeWidget支持直接在其单元格内放置widget。Item widget允许你在这些控件的每个项里放置更复杂的控件,例如按钮、复选框、下拉菜单等。

1. QListWidgetItem

QListWidgetItem 用于在 QListWidget 中表示每个列表项。它可以包含文本、图标等,并且可以设置为可选、可编辑等。

from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem

app = QApplication([])
list_widget = QListWidget()

item = QListWidgetItem("Item 1")
list_widget.addItem(item)

item = QListWidgetItem("Item 2")
list_widget.addItem(item)

list_widget.show()
app.exec_()

2. QTableWidgetItem

QTableWidgetItem 用于在 QTableWidget 中表示单元格。与 QListWidgetItem 类似,它可以包含文本和图标,并具有多种状态和属性。

from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem

app = QApplication([])
table_widget = QTableWidget(2, 2)  # 2行2列

table_widget.setItem(0, 0, QTableWidgetItem("Cell (1,1)"))
table_widget.setItem(0, 1, QTableWidgetItem("Cell (1,2)"))

table_widget.show()
app.exec_()

3. QTreeWidgetItem

QTreeWidgetItem 用于在 QTreeWidget 中表示树形结构的每个节点。它可以有一个或多个子项,并且可以包含文本、图标等。

from PyQt5.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem

app = QApplication([])
tree_widget = QTreeWidget()
tree_widget.setHeaderLabels(["Column 1", "Column 2", "Column 3"])

parent_item = QTreeWidgetItem(["Parent"])
tree_widget.addTopLevelItem(parent_item)

child_item = QTreeWidgetItem(["Child 1"])
parent_item.addChild(child_item)

tree_widget.show()
app.exec_()

4. 使用Widgets作为Item

QTableWidgetQListWidget 中,你还可以直接将widget作为item插入。

from PyQt5.QtWidgets import QApplication, QTableWidget, QPushButton

app = QApplication([])
table_widget = QTableWidget(2, 2)

# 在表格中插入按钮
button = QPushButton("Button in Table")
table_widget.setCellWidget(0, 0, button)

table_widget.show()
app.exec_()

注意事项

  • 使用item widget可以创建更动态和交互式的列表、表格和树形视图。
  • 但是,大量使用widget作为item可能会影响性能,特别是在处理大型数据集时。
  • 对于复杂的数据展示需求,考虑使用基于模型的视图(如 QListView, QTableView, QTreeView 以及它们的对应模型),这些通常提供更好的性能和灵活性。

PyQt5的item widget为在各种复杂场景下构建丰富的用户界面提供了很大的灵活性和便利。

11-26 14:20