再次:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5 import QtCore
import PyQt5
import sys, types
class OrgItemModel( QStandardItemModel ):
def __init__( self, tree_view ):
super().__init__()
self.tree_view = tree_view
self.setHorizontalHeaderLabels( [ 'Tasks', 'Due date', 'Notes' ] )
def configure( tree_view, main_window ):
tree_view.setModel( OrgItemModel( tree_view ) )
def load_from_list( self ):
new_model = OrgItemModel( self )
root_item = new_model.invisibleRootItem()
lines = [
'Europe ||| 2020-10-26 ||| some notes',
'==France ||| 2020-10-27 ||| some France notes',
'====Paris ||| --- ||| blah blah',
'==Germany ||| ||| ',
'==Italy ||| 2020-10-28 ||| some Italy notes',
'====Rome ||| ||| ',
'==Ireland ||| 2020-10-30 ||| blah blah',
]
我对QStandardItemModel方法insertRow和方法感到困惑appendRow。目前我的QTreeView模型中有 3 列。我正在迭代一个列表来重建树,基于列表中的缩进(在每个深度级别的行开头使用“==”)来表示树深度。
列表中的每一行用字符串“ ||| ”分隔给定行上的三个项目的文本(我计划在某个时候实现 JSON 序列化)。
当我将行文本拆分为“ ||| ”时,会生成 3 个字符串。如果第二个或第三个是空白字符串,这应该意味着该项目不应添加到模型中,即在树视图中,人们应该只看到树节点,并且其行的其余部分不应包含任何项目(即无效索引) )。...但我发现即使我只插入 1 个项目(而不是 3 个项目的列表),(有时)会在 的QTreeView
模型的行中创建三个项目。并且index.isValid()
在上面的检查行中始终返回True
,即使它只是插入一项(在 col0 中)。在这种情况下,data_at_coord
for col1 和 col2 被打印为“None”。
因此,在显示的视图中,我可以单击已完成此操作的行的 col1 或 col2,并找到一个空白的可编辑项目,并在检查时发现这些是有效的索引。它们不应该是:我的目的是添加一个新行,其中 col1 和 col2 中没有项目,只有 col0 中没有项目。
当我运行上面的 MRE 时,“Rome”行的行为如下:您可以尝试单击 col1 和 col2,但没有任何反应。但“德国”行似乎表现得很奇怪:当我单击 col1 或 col2 时,我发现我正在编辑一个空白字符串。
注意,如果实际上您使用new_model.appendRow
而不是item.appendRow
在结果方面存在差异:
树构建算法没有按预期工作,并且
“Rome”行现在也无法执行“应该”执行的操作,并且 col1 和 col2 是可编辑的空白字符串。
九州编程
相关分类