python - 如何在 QTreeWidget 中获得点击的项目?
问题描述
我有一个二维的QTreeWidget,如何点击获取Item?我使用 PyQt5。我有这部分代码,但它只获取所选行的第一项(或通过更改 baseNode.text(#) 获得任何其他项)
...
self.treeWidget.itemSelectionChanged.connect(lambda: loadAllMessages())
def loadAllMessages():
getSelected = self.treeWidget.selectedItems()
if getSelected:
baseNode = getSelected[0]
getChildNode = baseNode.text(0)
print(getChildNode)
...
解决方案
您只需要使用和单击的列itemClicked
发送的信号:QTreeWidgetItem
例子:
from PyQt5 import QtCore, QtGui, QtWidgets
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
lay = QtWidgets.QVBoxLayout(self)
tree = QtWidgets.QTreeWidget()
tree.setColumnCount(2)
lay.addWidget(tree)
for i in range(4):
parent_it = QtWidgets.QTreeWidgetItem(["{}-{}".format(i, l) for l in range(2)])
tree.addTopLevelItem(parent_it)
for j in range(5):
it = QtWidgets.QTreeWidgetItem(["{}-{}-{}".format(i, j, l) for l in range(2)])
parent_it.addChild(it)
tree.expandAll()
tree.itemClicked.connect(self.onItemClicked)
@QtCore.pyqtSlot(QtWidgets.QTreeWidgetItem, int)
def onItemClicked(self, it, col):
print(it, col, it.text(col))
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
推荐阅读
- windows - dir 命令意外行为
- javascript - Vue.js 与 Google Auth 使用模块?
- r - 计算某一行之前 14 行的一列的平均值,由每组的日期(年份)标识
- python - 使用 Gtk.DrawingArea 检测 Gtk 程序中缺少的 python-gi-cairo
- selenium-webdriver - 黄瓜 @Before 钩子运行两次 @After 一次
- rasa-nlu - 无法让机器人执行不同的操作
- javascript - Flow中的误报谓词函数类型检查,用于返回对其参数的否定的函数
- javascript - 文件上传拖放问题
- python - 如何在使用 python 和 Beautiful soup 抓取的同时访问站点中的兄弟元素
- python - 编写一个快速(数组运算)函数,求解一列中的函数以获得下一个函数值