python - QTableWidgetIem,当我点击不同深度的不同孩子时如何获取TopLevel文本
问题描述
我有一个关于QTreeWidgetItems
. 我尝试时,例如。有 5 个不同的分支子节点,然后单击底部(或最后一个)以获取topLevelItem
. 我也明白了,但它的代码变得令人困惑。
所以我想问一下是否有topLevelItem
比这段代码更温和的方法来获得:
def treeItem(self):
return self.treeWidget.selectedItems()[0]
def writeJson(self, data, filename="langJson/jsonFile.json"):
with open(filename, "r+") as f:
filedata = json.load(f)
#if data not in filedata:
for x in range(2):
try:
if self.treeItem().parent().parent().text(0) == self.treeWidget.topLevelItem(x).text(0) or \
self.treeItem().parent().parent().parent().text(0) == self.treeWidget.topLevelItem(x).text(0):
filedata[self.treeWidget.topLevelItem(x).text(0)].append(data)
f.seek(0)
json.dump(filedata, f, sort_keys=True,indent=4)
except:
if self.treeItem().parent().text(0) == self.treeWidget.topLevelItem(x).text(0):
filedata[self.treeWidget.topLevelItem(x).text(0)].append(data)
f.seek(0)
json.dump(filedata, f, sort_keys=True, indent=4)
例如,我点击这张图片。并且想要gg
显示 Python
而不重复parent (). parent () ...
注意:我使用 Qt 设计器创建了程序,所以我没有发布所有代码。但如果有必要,我会编辑一些关于它的东西。
解决方案
树结构需要实现递归函数。
要获取子项的顶级项,请使用 while 循环获取父项,直到找到有效的父项:
def topLevelParent(self, item):
while item.parent():
item = item.parent()
return item
然后,您只需topLevelParent
使用您获得的任何项目进行调用,并且将始终返回顶级,即使给定项目是顶级项目。
推荐阅读
- excel - 在 Linux 中将宏脚本添加到外部的 excel 文件中
- unity3d - 如何在webgl构建中将外部复制的文本粘贴到统一的输入字段中
- unit-testing - 模拟命名导出以使用 Jest 进行测试
- iterator - 尝试遍历网格结构会导致“借用值的寿命不够长”
- c++ - 为什么变量没有从指针传递改变?
- amazon-web-services - 如何使用 AWS CLI 或 EB CLI 将现有密钥对连接到正在运行的 ElasticBeanstalk EC2
- c# - 在 Windows 窗体应用程序的应用程序内未检测到 Sendkeys 事件
- angular - highcharts-angular:无法读取未定义的属性“图表”
- javascript - 验证动态字段引导验证器
- javascript - Javascript-我如何突出显示与 HTML 中的表单用户输入文本区域匹配的元素数组