考虑下面的完全展开的玩具树,其中我将Alpha
设为当前根:
from PyQt5 import QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setMinimumHeight(300)
self.setMinimumWidth(100)
my_tree = QtWidgets.QTreeWidget(self)
my_tree.resize(100, 300)
alpha = QtWidgets.QTreeWidgetItem(my_tree, ['Alpha'])
beta = QtWidgets.QTreeWidgetItem(my_tree, ['Beta'])
alpha.addChild(QtWidgets.QTreeWidgetItem(['one']))
alpha.addChild(QtWidgets.QTreeWidgetItem(['two']))
beta.addChild(QtWidgets.QTreeWidgetItem(['first']))
beta.addChild(QtWidgets.QTreeWidgetItem(['second']))
my_tree.expandAll()
my_tree.setCurrentItem(my_tree.topLevelItem(0))
self.show()
app = QtWidgets.QApplication([])
window = MainWindow()
app.exec_()
如何将Alpha
的第一个子项(即one
)作为当前项和选定项,而同时也仅扩展Beta
而不是两个根?
您可以使用setExpanded()展开或折叠项目:
alpha.setExpanded(False)
我刚刚注意到您的代码中有my_tree.expandAll()
。如果要折叠其中一项,请在item.setExpanded(False)
]之后使用.expandAll()
将第一个孩子设置为alpha时使用:
alpha.child(0).setSelected(True) print(alpha.child(0).isSelected()) #verify it's selected
将它们放在您的代码中的位置:
. . beta.addChild(QtWidgets.QTreeWidgetItem(['first'])) beta.addChild(QtWidgets.QTreeWidgetItem(['second'])) my_tree.expandAll() my_tree.setCurrentItem(my_tree.topLevelItem(0)) alpha.setExpanded(False) alpha.child(0).setSelected(True) print(alpha.child(0).isSelected()) # verify it's selected self.show()
要在选择更改时运行功能,请尝试以下代码,它将打印出所选项目或子项的文本(将其置于self.show之前:]
my_tree.itemSelectionChanged.connect(lambda: selected_item())
def selected_item():
getSelected = my_tree.selectedItems()
if getSelected:
baseNode = getSelected[0]
getChildNode = baseNode.text(0)
print(getChildNode)