- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在尝试做的是采用在底部子级具有复选框的填充树 (qtreewidget),如果选中该框,则将路径文本返回给子级。我想这样做的原因是,如果检查了一个 child ,它将更改字典中键的值。 (创建树的“原始”字典)。这是我的意思的一个直观示例:
已编辑
学习
-主题 1
--日期
---[]c
---[]d
---[]e
-主题 2
--日期
---[]g
---[]h
如果有人检查(例如)“g”级别的 child ,是否可以通过 [1, B, g] 或 1-B-g 或 1 之类的形式获取到“g”的路径/B/g等?
其中一个子级别(假设在示例 A 和 B 中)也设置为用户可编辑。所以我需要树中的信息,而不是树最初填充的信息。
我曾尝试打印 self.ui.treeWidget 索引,但没有真正得到我想要的东西。我觉得好像有一个简单的解决方案,但我似乎找不到。希望有人能提供帮助!
实际代码片段:
for h,study in enumerate(tree_dict['study']):
study_name = study['study_name']
treeSTUDY = QtGui.QTreeWidgetItem(self.ui.treeWidget, [study_name])
treeSTUDY.setFlags(QtCore.Qt.ItemIsEnabled)
self.ui.treeWidget.expandItem(treeSTUDY)
for i,subject in enumerate(study['subject']):
subject = subject['ID']
treeSUBJECT = QtGui.QTreeWidgetItem(treeSTUDY, [subject_id])
treeSUBJECT.setFlags(QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled)
for j,visit in enumerate(subject['visit']):
scan_date = visit['date']
treeDATE = QtGui.QTreeWidgetItem(treeSUBJECT, [scan_date[4:6])
treeDATE.setFlags(QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled)
for k,ser in enumerate(visit['series']):
s_name = ser['name'] + '-' + ser['description']
count = str(ser['count'])
treeSCAN = QtGui.QTreeWidgetItem(treeDATE)
treeSCAN.setFlags(QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsUserCheckable)
treeSCAN.setCheckState(0, QtCore.Qt.Unchecked)
treeSCAN.setText(0, s_name)
treeSCAN.setText(1, ser['time'])
treeSCAN.setText(2, ser['number'])
treeSCAN.setText(3, 'count')
最佳答案
您所需要的只是一个沿着父/子链向上移动的方法,获取每个项目的文本,直到父级为 None
:
def getTreePath(self, item):
path = []
while item is not None:
path.append(str(item.text(0)))
item = item.parent()
return '/'.join(reversed(path))
更新:
这是一个演示脚本,展示了如何获取选中的项目并检索其路径:
from PyQt4 import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.tree = QtGui.QTreeWidget(self)
self.tree.setHeaderHidden(True)
for index in range(2):
parent = self.addItem(self.tree, 'Item%d' % index)
for color in 'Red Green Blue'.split():
subitem = self.addItem(parent, color)
for letter in 'ABC':
self.addItem(subitem, letter, True, False)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.tree)
self.tree.itemChanged.connect(self.handleItemChanged)
def addItem(self, parent, text, checkable=False, expanded=True):
item = QtGui.QTreeWidgetItem(parent, [text])
if checkable:
item.setCheckState(0, QtCore.Qt.Unchecked)
else:
item.setFlags(
item.flags() & ~QtCore.Qt.ItemIsUserCheckable)
item.setExpanded(expanded)
return item
def handleItemChanged(self, item, column):
if item.flags() & QtCore.Qt.ItemIsUserCheckable:
path = self.getTreePath(item)
if item.checkState(0) == QtCore.Qt.Checked:
print('%s: Checked' % path)
else:
print('%s: UnChecked' % path)
def getTreePath(self, item):
path = []
while item is not None:
path.append(str(item.text(0)))
item = item.parent()
return '/'.join(reversed(path))
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 250, 450)
window.show()
sys.exit(app.exec_())
关于python - PyQt4 Qtreewidget - 如果选中子复选框,则获取层次结构文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22419673/
我有一个 GUI,用户可以从列表中选择气体成分并将其移至“选择”,另一个按钮从“选择”中获取包含以下列的文本:气体成分、分子量、摩尔%。前两列从我创建的字典中获取信息,最后一列是用户输入。 当点击按钮
我的 QT 应用程序中有两个 QTreeWidget,使用 python (PyQt4)。 我想要 手动将 TreeWidget 1 展开为一个项目,然后。如果此项目位于 TreeWidget 2 中
我有两列的 QTreeWidget。第一列是文本,第二列是 QPushButton。我无法指定按钮的大小和第二列的大小。当您尝试设置内容栏的大小时,第二栏消失了。如何改变第二列的宽度? tree_wi
我有两列的 QTreeWidget。第一列是文本,第二列是 QPushButton。我无法指定按钮的大小和第二列的大小。当您尝试设置内容栏的大小时,第二栏消失了。如何改变第二列的宽度? tree_wi
我需要在 QTreeWidget 中的项目激活时执行一些操作,但下面的代码没有给我预期的结果: class MyWidget(QTreeWidget): def __init__(self,
我有一个文件,其中列出了绝对文件路径,每行 1 个。列出的文件是按顺序排列的,因此例如所有文件/Documents/ dir 将在文件中列在彼此之后。 我想要做的是将所有这些文件放在 QTreeWid
我想在我的程序中实现一个带有嵌套子级别的树,我正在寻找这两种( View /小部件)中的哪一种最适合我的目标。 我有一个任务完成/错过/失败的天数列表,每个任务都有完成/错过/失败的次数,最后是当天的
有谁知道是否可以在 QTreeWidget 上选择多个项目以及如何启用多项选择? 我想要选择的所有项目都是顶级 QTreeWidgetItems 并且它们的所有子项都设置为禁用(即 QTreeWidg
我对 Python 还很陌生,所以请耐心等待。我正在尝试从元组填充 QTreeWidget,但我似乎无法让它正常工作。 TreeList = ({ 'Header1': ((
我想不显示父 QWidgetItem 之间的空格和子项...我该怎么做。 style-Sheet ?.. 谢谢你!!! 这是 QTreeWidget . 最佳答案 http://qt-project.
我正在开发 python 插件。我使用 PYQT4 设计器来制作表单。我将查询结果列出到 QTreeWidget 中,如下所示: items = [] for row in c.f
我的 Qt 表单中有一个 treewidget。它显示了一个文件树,显示了一个代表它们的图标,以及它们的名称。 我使用 treeItem->setIcon(0, *icon) 和 treeItem->
我有一个 QTreeWidget,我的设置是这样的...... ModelTreeWidget::ModelTreeWidget(QWidget *parent):QTreeWidget(parent
默认情况下,QTreeWidget 管理行的选择(当您单击一行时它会突出显示它,当您单击另一行时它会突出显示并取消选择前一行) ,我不想要这个,也不知道如何关闭它。 最佳答案 你可以使用setSele
当我将选择模式设置为 ExtendSelection 时,“选定效果”(使用 TAB 时获得的效果)始终存在于我的 QTreeWidget 中(我需要它才能选择多个项目)。 如果我从代码中删除这一行,
我有一个 QTreeWidget,其中填充了自定义小部件。我从外部 API 检索项目类型,它可能是文本值、数值或其他任何值。根据类型,我为 QTreeWidgetItem 提供了不同的控件。例如用于文
我有一个 QTreeWidget,我想添加图标,是否有默认设置可供选择,例如资源管理器中的文件夹和一张空白纸图标? 最佳答案 默认有几个图标,例如: 与 QStyle::standardIcon(..
嗯。我正在开发一个 IDE。你们中的一些人可能看到了一篇关于它的帖子。好吧,我不知道 QTreeWidget 和 QtreeWidgetItem 是如何工作的,因为找不到演示并且文档也没有帮助。好吧,
我想要一个带有 1 列标题的 qtreewidget,但它的子项有更多列,我尝试了下面的代码,但我也想隐藏补贴标题。 treeView = new QTreeView; treeView->setMo
我正在尝试进行某种递归。如果您打开 P,那么您可以再次打开 P 或执行其他操作。这是我的问题: 我不能两次添加相同的项目。 while (*it) { if ((*it)->text(0) =
我是一名优秀的程序员,十分优秀!