在PyQt的QTreeWidget里,获取选中项列表直接用selectedItems()方法就行。这个方法返回一个列表,里面是当前所有被选中的QTreeWidgetItem对象。
给你个简单的例子,一看就明白:
import sys
from PyQt5.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget, QPushButton
class TreeWidgetDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
layout = QVBoxLayout()
# 创建树控件
self.tree = QTreeWidget()
self.tree.setHeaderLabels(['名称', '类型'])
# 添加一些示例数据
root = QTreeWidgetItem(self.tree, ['根节点', '文件夹'])
child1 = QTreeWidgetItem(root, ['子节点1', '文件'])
child2 = QTreeWidgetItem(root, ['子节点2', '文件'])
child3 = QTreeWidgetItem(child1, ['孙子节点', '文件'])
self.tree.expandAll()
# 创建按钮来获取选中项
btn = QPushButton('获取选中项')
btn.clicked.connect(self.get_selected_items)
layout.addWidget(self.tree)
layout.addWidget(btn)
self.setLayout(layout)
self.setWindowTitle('TreeWidget选中项示例')
self.setGeometry(300, 300, 400, 300)
def get_selected_items(self):
# 关键代码:获取所有选中项
selected_items = self.tree.selectedItems()
if not selected_items:
print("没有选中任何项")
return
print(f"选中了 {len(selected_items)} 个项:")
for item in selected_items:
# 获取每列文本
name = item.text(0)
item_type = item.text(1)
print(f" - {name} ({item_type})")
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = TreeWidgetDemo()
demo.show()
sys.exit(app.exec_())
运行这个程序,在树控件里用Ctrl+点击多选几个节点,然后点按钮,控制台就会输出所有选中项的信息。
几点说明:
selectedItems() 返回的是个Python列表,可以直接用len()、循环遍历等操作
- 每个选中项都是
QTreeWidgetItem对象,用text(column)方法获取对应列的文本
- 支持单选和多选,取决于
selectionMode的设置(默认是QAbstractItemView.ExtendedSelection,支持Ctrl多选)
总结:用tree.selectedItems()直接搞定。